相信做IT的程序员们对https都不陌生,目前几乎所有的请求都基于https,但究竟它整个发送的过程是什么呢?想彻底搞明白https,细致的把每一个环节都弄清楚就很重要了。
首先,准备工作如下:
1.服务端生成自己的公私钥(具体方法可以百度),公钥S.pub,私钥S.pri
2.将公钥S.pub给权威的CA机构(花钱)
3.CA机构生成公私钥CA.pub和CA.pri。再使用CA.pri对你的S.pub签名生成CA证书,再将CA证书颁发给服务器。
4.各个电脑手机等终端生产的时候都内置了CA机构的根证书,CA的公钥CA.pub。
到此,服务端申请证书过程已经结束,通信前的工作就完成了,接下来就是服务器和各客户端的交互了。
1.客户端生成随机数Random_C,向服务器发送客户端的SSL版本和支持的加密算法、Random_C
2.服务端生成的随机数Random_S,服务器返回选好的加密算法和Hash算法、随机数Random_S。同时返回CA证书,里面包含公钥S.pub、证书的颁发机构、有效期等信息
3.客户端收到这些后,用本地的CA根证书、CA.pub去验证服务器给的证书的合法性。若合法继续下一步,不合法则断开,提示用户
4.验证合法后,客户端计算产生随机数字pre-master,使用S.pub加密。根据两个明文随机数Random_C、Random_S和pre-master计算得出对称密钥 enc_key = Fun(Random_C、Random_S、pre-master)。使用约定的hash算法计算摘要,并使用对称密钥enc_key加密
5.将上面生成的所有信息(加密后的pre-master、加密的摘要信息)发送给服务端
6.服务器使用S.pri对pre-master解密,结合Random_C、Random_S,计算得出对称密钥。再使用hash算法计算摘要信息,使用对称密钥解密客户端发过来的信息,验证密钥的正确性
7.根据摘要信息生成数据,并使用对称密钥加密发给客户端。客户端验证,验证通过则握手完成。
8.此后,客户端和服务端使用上述的对称密钥enc_key加密/解密进行通信
网友评论