HTTPS是怎么建立连接的

整个 HTTPS 的通信过程还是比较复杂的,粗略的来说,可以分成四步。
第一步是 DNS 解析,将域名转换成 IP。
第二步是建立 TCP 连接,也就是三次握手过程。
第三步是在 TCP 的基础上完成 TLS 握手过程。
第四步就是利用 TLS 握手过程交换的密钥进行通信,发送数据的加密,接收数据的解密。
这其中最复杂的就是 TLS 握手过程,具体来说,
首先是打招呼,客户端和服务端就 TLS 版本,加密算法和压缩算法达成一致,并且交换随机数。
其次,服务端发送证书,而客户端验证证书。
第三,客户端再次生成一个随机数 Pre-Master Secret,加密(用CA证书里的公钥)之后发送给服务端,服务端解密(用服务端自己的私钥)就能得到这个随机数。
第四,利用交换的随机数和 Pre-Master Secret,按照算法生成密钥,这个就是会话密钥,后续 HTTPS 数据传输就是用这个密钥。
最后完成握手,双方互相发送 Finished 结束握手过程。
简述
一打招呼,二验证书,三换随机数,四生密钥,完成握手;
重点
TLS握手过程;
引导
DNS解析;三次握手过程
TLS为什么安全,效果更好
从上面的过程也能看出来,TLS握手的安全性源于其多重保障机制:
首先,通过密钥交换和随机数生成确保数据加密,防止窃听;
其次,利用数字证书和证书链验证服务器身份,杜绝中间人攻击;
第三,TLS 每个消息都有一个验证码(MAC),使用消息认证码保护消息完整性;
最后协议的分层设计和版本协商进一步提升安全性,有效抵御重放、时序等常见攻击。
因此虽然看上去 TLS 握手的前面打招呼和证书验证过程是明文传输,但是依靠着证书和三个随机数,还是能够保障很强的安全性
用CA证书里的公钥对 会话密钥进行加密 (非对称加密)
把加密后的 会话密钥发送给服务端,服务端用私钥进行解密 (非对称加密)