SSL协议
- 双方利用明文通信的方式确立使用的加密算法。
- 利用非对称算法通信,交换一个密钥。
- 该密钥用于对称加密算法,加密接下来的通信正文。
密钥协商
- 客户端发送 Client hello, 包含客户端随机数、支持的加密套件、ALPN 协议进行协商
- 服务端发送 Server Hello, 选定加密套件和协议
- 服务端发送 Certificate 证书信息
- 服务端发送 Server key exchange 公钥和随机数
- 服务端发送 Server finished 结束握手
- 客户端发送 Client key exchange 预主密钥
- 客户端发送 Change cipher spec 启用对称密钥
- 客户端发送 Finished 握手结束
- 服务端发送 Change cipher spec 启用对称密钥
- 服务端发送 Finished 握手结束
示例
* ALPN: curl offers h2,http/1.1
* (304) (OUT), TLS handshake, Client hello (1):
* CAfile: /etc/ssl/cert.pem
* CApath: none
* (304) (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 / [blank] / UNDEF
* ALPN: server accepted http/1.1
* Server certificate:
* subject: C=CN; ST=beijing; L=beijing; O=Beijing Baidu Netcom Science Technology Co., Ltd; CN=baidu.com
* start date: Jul 9 07:01:02 2025 GMT
* expire date: Aug 10 07:01:01 2026 GMT
* subjectAltName: host "www.baidu.com" matched cert's "*.baidu.com"
* issuer: C=BE; O=GlobalSign nv-sa; CN=GlobalSign RSA OV SSL CA 2018
* SSL certificate verify ok.
对称密钥如何协商
- 双方互换随机数
- 服务端发送证书
- 客户端用证书随机生成并加密预主密钥
- 服务端用私钥解密预主密钥
- 双方用两个随机数和预主密钥生成对应的对称密钥