0%
1. SSL 建立连接过程
- 在 Client 端和 Server 端建立 TCP 连接后, Client 端以下信息发送给 发送给 Server 端:
- version: 当前支持的最后TLS协议版本
- cipher suites: 客户端支持的加密套件列表
每个加密条件对应4个功能组合:
- Au, 认证算法, 用于身份认证
- Key Exchange, 密钥交换算法, 用于密钥协商
- Enc, 对称加密算法, 用于信息加密
- Mac, 信息摘要算法, 用于完整性效验
- compression methods: 支持的压缩算法列表, 用于后续的信息压缩传输
- random_client: 用于后续的密钥生成
- extensions: 扩展字段, 支持协议与算法的相关参数及其他辅助信息等, 如常见的SNI
- Server 端将以下信息发送给 Client 端:
- version: 使用的协议版本
- cipher suite: 选择的加密套件
- compression method: 选择的压缩算法
- random_server: 用于后续的密钥生成
- Server 端将证书连接发送给客户端, 用于身份认证和秘钥交换.
如果 Server 端将需要验证客户端, 则还会发送 client_certificate_request 标识, 请求验证客户端证书. 验证过程和 Client 端验证服务端类似.
- Client 端验证证书合法性
- 证书链的可信性 trusted certificate path
- 证书是否被吊销 revocation
- 有效期 expiry date
- 域名 domain
- 如果检验合格, Client 端计算产生前主密钥 (是一个随机数, Pre-Master Secret, PMS), 并用证书公钥加密, 并通过摘要算法算出信息摘要, 发送给 Server 端. 信息摘要是为了防止被篡改.
此时客户端已经获得计算协商密钥的全部信息:两个明文随机数 random_client 与 random_server, 以及自己计算产生的 pre_master_secret
计算得到协商密钥: session_secret = encrypt(random_client, random_server, pre_master_secret)
- Server 端接收到加密信息后, 通过私钥解密获得前主秘钥, 并计算得出协商密钥.