HTTPS建立连接的过程-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

HTTPS 协议是基于 TCP 协议的因而要先建立 TCP 的连接。在这个例子中TCP 的连接是在手机上的 App 和负载均衡器 SLB 之间的。

尽管中间要经过很多的路由器和交换机但是 TCP 的连接是端到端的。TCP 这一层和更上层的 HTTPS 无法看到中间的包的过程。尽管建立连接的时候所有的包都逃不过在这些路由器和交换机之间的转发转发的细节我们放到那个下单请求的发送过程中详细解读这里只看端到端的行为。

对于 TCP 连接来讲需要通过三次握手建立连接为了维护这个连接双方都需要在 TCP 层维护一个连接的状态机。

一开始客户端和服务端都处于 CLOSED 状态。服务端先是主动监听某个端口处于 LISTEN 状态。然后客户端主动发起连接 SYN之后处于 SYN-SENT 状态。服务端收到发起的连接返回 SYN并且 ACK 客户端的 SYN之后处于 SYN-RCVD 状态。

客户端收到服务端发送的 SYN 和 ACK 之后发送 ACK 的 ACK之后处于 ESTABLISHED 状态。这是因为它一发一收成功了。服务端收到 ACK 的 ACK 之后也会处于 ESTABLISHED 状态因为它的一发一收也成功了。

当 TCP 层的连接建立完毕之后接下来轮到 HTTPS 层建立连接了在 HTTPS 的交换过程中TCP 层始终处于 ESTABLISHED。

对于 HTTPS客户端会发送 Client Hello 消息到服务器用明文传输 TLS 版本信息、加密套件候选列表、压缩算法候选列表等信息。另外还会有一个随机数在协商对称密钥的时候使用。

然后服务器会返回 Server Hello 消息告诉客户端服务器选择使用的协议版本、加密套件、压缩算法等。这也有一个随机数用于后续的密钥协商。

然后服务器会给你一个服务器端的证书然后说“Server Hello Done我这里就这些信息了。”

客户端当然不相信这个证书于是从自己信任的 CA 仓库中拿 CA 的证书里面的公钥去解密电商网站的证书。如果能够成功则说明电商网站是可信的。这个过程中你可能会不断往上追溯 CA、CA 的 CA、CA 的 CA 的 CA反正直到一个授信的 CA就可以了。

证书验证完毕之后觉得这个服务端是可信的于是客户端计算产生随机数字 Pre-master发送 Client Key Exchange用证书中的公钥加密再发送给服务器服务器可以通过私钥解密出来。

接下来无论是客户端还是服务器都有了三个随机数分别是自己的、对端的以及刚生成的 Pre-Master 随机数。通过这三个随机数可以在客户端和服务器产生相同的对称密钥。

有了对称密钥客户端就可以说“Change Cipher Spec咱们以后都采用协商的通信密钥和加密算法进行加密通信了。”

然后客户端发送一个 Encrypted Handshake Message将已经商定好的参数等采用协商密钥进行加密发送给服务器用于数据与握手验证。

同样服务器也可以发送 Change Cipher Spec说“没问题咱们以后都采用协商的通信密钥和加密算法进行加密通信了”并且也发送 Encrypted Handshake Message 的消息试试。

当双方握手结束之后就可以通过对称密钥进行加密传输了。

此文章为10月Day09学习笔记内容来源于极客时间《趣谈网络协议》推荐该课程。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6