LouisTsang-jk.github.io

HTTPS

HTTPS 就是 HTTP 的加密版本,它使用 SSL/TLS 协议来保护数据传输。

概念

数字签名

数字签名就是使用私钥对数据摘要进行签名,并附带和数据一起发送。 可以起到防篡改、防伪装、防否认的作用。

证书

数字证书就是由 CA 机构使用自己私钥,对证书申请者的公钥进行签名认证。 数字证书解决了如何安全分发公钥的问题,也奠定了信任链的基础。

加密

TLS 中采用混合加密(非对称加密),是基于性能的考虑。

对称加密

非对称加密

TLS 握手

ClientHello

客户端通过向服务器发送“问候”消息来开始握手。该消息将包含客户端支持的 TLS 版本,支持的密码套件,以及称为一串称为“客户端随机数(client random)”的随机字节。

SeverHello

作为对 client hello 消息的回复,服务器发送一条消息,内含服务器的 SSL 证书、服务器选择的密码套件,以及“服务器随机数(server random)”,即由服务器生成的另一串随机字节。

Certificate

客户端使用颁发该证书的证书颁发机构验证服务器的 SSL 证书。此举确认服务器是其声称的身份,且客户端正在与该域的实际所有者进行交互。

Client Key Exchange

客户端再发送一串随机字节,即“预主密钥(premaster secret)”。预主密钥是使用公钥加密的,只能使用服务器的私钥解密。(客户端从服务器的 SSL 证书中获得公钥。)

客户端和服务器均使用客户端随机数、服务器随机数和预主密钥生成会话密钥。双方应得到相同的结果。

会话密钥用于加密和解密 TLS 握手之后的所有通信

Change Cipher Spec Finished

MAC

MAC(Message Authentication Code)称为报文摘要,能够查知报文是否遭到篡改,从而保护报文的完整性。

双方使用对称加密算法进行加密,用 hash secret 对 HTTP 报文做一次运算生成一个 MAC,附在 HTTP 报文的后面,然后用 session-secret 加密所有数据(HTTP+MAC),然后发送。

接收方则先用 session-secret 解密数据,然后得到 HTTP+MAC,再用相同的算法计算出自己的 MAC,如果两个 MAC 相等,证明数据没有被篡改。

会话密钥

DH 算法

RSA 算法