所谓握手,就是传输层创建TCP连接的过程,https在http握手(TCP3次握手,传输层协议)基础上多了一次握手(应用层的协议),主要为了确认服务端合法,并向服务端传递通讯秘钥。
以下的过程算作TLS的一次握手:
-
传递秘钥前首先客户端需要确认服务端的身份是否合法:
客户端发起请求服务端地址,
服务端响应返回证书(包含公钥,还有其他认证信息);
客户端验证这个证书是否合法,如果是CA认证的,浏览器不会有任何反应,如果是服务端自己私建的,浏览器会弹窗让用户选择是否信任此证书。 -
客户端确认证书合法代表信任了服务端,然后就是传送通讯秘钥的过程:
客户端自己生成了一个随机字符串作为通讯秘钥,并用公钥对通讯秘钥加密(还包括通讯用的加密算法),
发送给服务端,
服务端用私钥解密得到了通讯秘钥和通讯加密算法。 -
开始传输报文:
服务端使用通讯秘钥和约定好的通讯加密算法对报文加密并返回,此后客户端和服务端的报文都会使用此秘钥和算法加密传输(对称加密)。
所以,https创建链接经历了4次握手,断开和http一样,4次挥手。
TLS握手是非对称加密,通讯报文过程是对称加密。
关于浏览器认证CA证书过程:
- 浏览器会查看服务端证书上的CA机构,搜索本地是否有此CA的根证书,如果没有就弹窗提示,有就往下进行。
- 使用CA根证书的公钥对服务端证书的指纹和指纹算法解密,拿到指纹和指纹算法,
- 使用指纹算法对服务端证书的摘要进行加密,的得到指纹
- 对比2个指纹,一样则通过验证。
CA认证也是一个非对称加密过程,只不过TLS是“公钥加密,私钥解密”,CA正好返过来,“公钥解密,私钥加密”,用“指纹和指纹算法”来确认公钥解密的结果是正确的。
这种不用向CA机构请求就能验证证书的设计还是很巧妙的。
参考文章:
http与https握手那些事
浏览器CA认证流程
网友评论