环境
- mac 10.13.6, LibreSSL 2.2.7
前言
对于数字签名、证书、CA、Https的相关概念一直都很混乱.参考了相关资料后,并记录.
公钥、私钥
用于对数据进行加密、解密.
摘要(digest)、数字签名(signature)
摘要,是对数据进行hash运算后的数据; 数字签名(signature),使用公(私)钥对摘要进行加密后的数据.
CA(Certificate Authority)证书中心、数字证书(Digest Certificate)
CA(证书中心)用自己的私钥,对用户公钥、用户个人信息进行加密,生成数字证书(Digest Certificate).
SSL握手过程
客户端向服务器发请求,请求证书
服务器把证书发给客户端
客户端一般会有大部分CA的公钥,客户端收到证书后,检查该颁发者是否是客户端认可的CA,如果是,就用该CA的公钥解密数字签名,然后再计算
证书中的”公钥和证书信息“的hash值,比较两者,如果相同,那就说明该证书没有被人篡改过,而且是该CA机构颁发的。当然,还会进行其它验证,
如证书的common name与http request header中的host(不包括端口)是否相同,等等,如果有哪项检查不通过,会有告警,如果所有检查通过,
那进入下一步。客户端生成对称密钥,用证书中的公钥加密,发给服务器
服务器收到对称密钥后保存,给客户端一个应答。
客户端接收响应,这样就完成了SSL连接,后面的通信用对称密钥加密数据传输。
因为非对称加密相对对称加密来说比较耗时,所以正式的数据传输是用对称加密算法。非对称加密只是用于建立SSL时对称密钥的安全传输。我们可以设置
HTTPS长连接,这样建立好SSL+HTTP连接后,可以用这个连接发多次HTTPS请求,而不用每次请求都建立连接。
生成证书
详细信息参考req
1 | # 生成一个RSA私钥,1024是加密强度,一般是1024或2048 |
- 使用自签名脚本
1 | $ ./gencrt.sh |
Nginx使用
1 | # 启动nginx |
参考
附录
自签名脚本
1 | $ vim gencrt.sh |