HTTPS 工作原理
此篇记录 HTTPS 相关知识点。
- HTTPS 是什么?和 HTTP 是什么关系?
- HTTPS 工作原理
[TOC]
HTTPS 定义
HTTPS = HTTP 协议 + SSL/TLS协议,即 HTTPS 不是一个新的网络协议,而是在 HTTP 协议的基础上,在传输层之上加了 SSL/TLS 协议,用于加密传输的数据。正是因为 SSL/TLS 的存在,所以 HTTPS 通信是安全通信。
数据加密算法有对称加密算法和非对称加密算法两种。对称加密算法简单,非对称加密算方法复杂,对于 HTTP,传输数据频繁,如果使用非对称加密算法,网络延迟就会变大。如果采用对称加密,密钥会在公网传输,会存在密钥被盗风险。因此,HTTPS 采用非对称加密传输对称加密密钥的方案,这样既保证了加密算法的时效性,又保证了密钥的安全性。
HTTPS 工作原理
HTTPS 通信框架与 HTTP 一样,唯一的区别就是数据在传递到传输层之前,HTTPS 会通过 SSL/TLS 使用对称加密算法对数据进行加密。
对称加密算法加密的前提是需要有加/解密算法 + 密钥,所以在 HTTPS 通信之前,客户端需要和服务服务器协商加/解密算法和密钥,这个协商的过程就是 HTTPS 建立连接的过程。这个过程大概流程如下:
- 客户端发送 Client Hello 报文给服务器,请求服务器建立连接。
- Client Hello 报文中包含了客户端本地可用的 TLS版本、客户端可使用的对称加密算法、非对称加密算法、hash算法以及客户端在请求建立连接时,生成的随机数。
-
服务器收到 Client Hello 报文后,如果能够建立连接,则回复 Server Hello 报文给客户端。
- Server Hello 报文中包含了服务器确认连接使用的 TLS 版本、对称加密算法、非对称加密算法、hash算法以及服务器生成的随机数。
- 服务器确认的 TLS 版本及各种算法是客户端发送的可选项之一。
- 至此,客户端和服务器确认了加密算法和 hash 算法,并且双方都持有了客户端随机数和服务器随机数。
-
服务器在发送 Server Hello之后,会紧接着给客户端发送服务器的证书。
- 这一步服务器主要目的是为了给客户端发送非对称加密算法的公钥,这个公钥存储在服务器证书 A 中 。
- 为了保证公钥合法性,服务器在发送证书 A 时同时发送了证书 A 的签名。
- 而签名服务器证书 A 使用的非对称加密算法公钥存储在另外一个证书 B 中。
- 为了保证证书 B 中公钥的合法性,又需要对证书 B 做签名。... 以此递归,这个证书链可以很长,最后根证书是保存在客户端本地的,是操作系统自带的可信证书,其公钥是默认合法的。
-
客户端收到服务器的证书之后,会通过收到的服务器证书中公钥加密一个新的随机数发送给服务器,这个加密后的随机数通常称为 Pre-master secret。
- 至此,客户端和服务器双方都持有了客户端随机数、服务器随机数和非对称加密的随机数 Pre-master secret。
客户端和服务器组合客户端随机数、服务器随机数和 Pre-master secre 这三个值生成 Master secret。并通过 Master secret 生成客户端加密密钥、服务器加密密钥、客户端 MAC secret、服务器 MAC secret 用于 HTTPS 通信。
客户端发送 READY、FINISH 消息给服务器。
服务器发送 READY、FINISH 消息给客户端。
至此,HTTPS 通信连接就建立了。
问题
-
为什么需要客户端对称密钥和服务器对称密钥?
- 客户端或者服务器发送信息时,分别使用不同的密钥,防止发出的消息被截获并原路返回,误认为是对方回复的消息。
-
MAC secret 有什么用?
- 用于组合 hash 算法,生成带指纹的 hash 算法。