网络安全
密钥
TLS/SSL是一个公钥与私钥的结构,它是一个非对称的结构。每一个服务器和客户端都有自己的公私密钥。公钥用来加密要传输的数据,私钥用来解密接收的数据。公钥和私钥是配对的,通过公钥加密的数据,只有通过私钥才能解密,所以建立安全传输之前,客户端和服务器端之间需要互换公钥。
客户端和服务器交换密钥.png
Node底层采用的是openssl实现TLS/SSL
// 生成服务器端私钥
openssl genrsa -out server.key 1024
// 生成客户端私钥
openssl genrsa -out client.key 1024
通过生辰1024位长的RSA私钥文件,然后根据rsa私钥文件生成公钥
openssl rsa -in server.key -pubout -out server.pem
// 根据私钥生成对应的公钥文件
openssl rsa -in client.key -pubout -out client.pem
为了解决中间人攻击文件, 需要在数据传输的过程中对得到的公钥进行认证,以确保得到的公钥是出自目标服务器。TSL/SSL引入了数字证书来进行认证。与直接用公钥不同,数字证书中包含了服务器的名称和主机名、服务器的公钥/签名机构的名称、来自签名颁发机构的签名。在连接建立前,通过证书的签名确认收到的公钥是否来自目标服务器,从而产生信任关系。
数字证书
我们需要引入一个第三方:CA(certificate Authority,数字证书认证中心)CA的作用是为站点颁发证书,这个证书具有通过CA通过自己的公钥和私钥实现的签名。
为了得到签名证书,服务器需要通过自己的私钥生成CSR(certificate Signing Request, 证书签名请求)文件。CA机构通过这个文件办法属于该服务器端的签名证书,只要通过CA机构就能够验证证书是否合法。
中间人过程.png
一般的中小企业多半采用自签名证书来构建安全网络的,所谓的自签名证书,就是自己扮演CA机构,给自己的服务器端颁发签名证书。
首先CA需要生成私钥,生辰CSR文件,通过私钥自签名生成证书的过程:
openssl genrsa -out ca.key 1024
openssl req -new ca.key -out ca.csr
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
服务器端
服务器首先需要创建自己的CSR文件,此时需要Common Name需要匹配服务器域名,否则需要出错
openssl req -new -key server.key -out server.csr
openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt
CA机构签名需要CA的证书和私钥,最后得到的是一个带有CA签名的证书。
自签名证书过程.png