SSL / TLS 以及 TLS 握手概念
SSL / TLS 以及 TLS 握手概念
salt-fish1. 关于本笔记
本文件介绍的是 SSL / TLS 以及 TLS 握手相关知识。
2. 目录
3. 内容
SSL / TLS 以及 SSL / TLS 握手的概念
SSL 和 TLS 协议可以为通信双方提供识别和认证通道,从而保证通信的机密性和数据完整性。
TLS 协议是从 Netscape SSL 3.0 协议演变而来的,不过这两种协议并不兼容。SSL 已经逐渐被 TLS 取代,所以下文就以 TLS 指代安全层。
TLS 握手是启动 HTTPS 通信的过程,类似于 TCP 建立连接时的三次握手。
在 TLS 握手过程中,通信双方交换消息以相互验证、相互确认,并确立它们所要使用的加密算法以及会话密钥(用于对称加密的密钥)。
可以说,TLS 握手是 HTTPS 通信的基础部分。
TLS 握手过程中发生了什么
TLS 握手的目的是建立安全连接,通信双方主要完成以下事情:
- 商定双方通信所使用的 TLS 版本(例如 TLS1.0、1.2、1.3 等)。
- 确定双方所要使用的密码组合。
- 客户端通过服务器公钥和数字证书上的数字签名验证服务端身份。
- 生成会话密钥,该密钥用于握手结束后的对称加密。
TLS 握手过程中的一些重要概念
数字证书(digital certificate)
在非对称加密通信过程中,服务器需要将公钥发送给客户端。这个过程里,公钥可能会被第三方拦截并替换,然后第三方就可以冒充服务器与客户端通信,这就是“中间人攻击”。
解决这个问题的方法是引入受信任第三方(CA):
- 服务器不直接向客户端发送公钥。
- CA 根据服务器公钥和其它信息生成数字证书(明文)。
- CA 对证书摘要进行私钥签名,得到数字签名。
- 服务器将证书和签名一并发送给客户端。
数字证书一般包含以下内容:
- 证书所有者公钥
- 证书所有者专有名称
- 证书颁发机构专有名称
- 证书有效起始日期
- 证书过期日期
- 证书数据格式版本号
- 证书序列号(由颁发机构分配的唯一标识)
数字签名(digital signature)
数字签名与手写签名类似,用于确保数据发送者身份合法,并确保数据未被篡改。
数字签名生成与验证流程:
- 服务器对证书内容计算摘要(如 SHA-256),再使用私钥对摘要加密生成数字签名。
- 服务器把数字证书与数字签名一起发送给客户端。
- 客户端用 CA 公钥解密数字签名,得到摘要信息。
- 客户端用同样摘要算法重新计算证书摘要并比对。
- 摘要一致则证书未被篡改,否则验证失败。
证书链(certificate chain)
证书链(信任链,Chain of Trust)是指一系列数字证书的有序连接,它构成了从最终实体证书(如服务器证书)到受信任根 CA 证书的路径。
构成规则:
- 链中每个证书(除根证书)都由上一级证书私钥签发。
- 链顶端是自签名根证书,作为信任锚点,被操作系统和浏览器预置信任。
示例:
服务器证书(由中间 CA 签发) <- 中间 CA 证书 <- 更上层中间 CA 证书 <- 根 CA 证书(自签名并被系统信任)
证书链的作用:
- 建立并传递信任:将“根 CA 信任”延伸到最终服务器证书。
- 缓解根 CA 私钥风险:根 CA 可离线保护,由中间 CA 承担日常签发。
- 提高管理灵活性与扩展性:支持分层管理与大规模签发。
- 支持多场景身份验证:服务器证书、客户端证书、代码签名等。
证书链验证过程简述:
- 收集证书:客户端获取服务器证书与中间 CA 证书。
- 构建链条:向上追溯到本地受信任根 CA。
- 逐级验证:检查签名、有效期、吊销状态、用途约束、域名匹配(服务器证书)。
- 最终信任:整条链验证通过且可回溯到受信任根 CA,则服务器身份可信。
核心思想:
客户端持有“根信任”,沿链条逐级验证,确认信任路径完整、有效且未被篡改。
密码规范和密码组合(CipherSpecs 和 CipherSuites)
通信双方在安全连接中使用的算法必须符合密码协议规范。
- CipherSpecs:定义认证加密算法和摘要算法规范。
- CipherSuites:定义 SSL / TLS 连接中使用的加密算法组合。
CipherSuites 通常包含三类算法:
- 握手阶段密钥交换和认证算法(常见如 RSA)。
- 握手完成后的对称加密算法(如 AES、3DES)。
- 信息摘要算法(如 SHA-256、SHA-1、MD5)。
TLS 握手详细过程
下图展示了 TLS 握手概念流程:
流程说明:
- 客户端发送
client hello(握手请求),包含支持的 TLS 版本、密码组合、client random。 - 服务器返回
server hello(响应),包含证书、选定密码组合、server random。 - 客户端验证服务器证书(签名、证书链、有效期、吊销状态等)。
- 客户端生成
premaster secret,用服务器公钥加密后发送。 - 服务器使用私钥解密
premaster secret。 - 双方使用
client random、server random、premaster secret通过同一算法生成共享密钥KEY。 - 客户端发送使用
KEY加密的finished消息。 - 服务器发送使用
KEY加密的finished消息。 - 握手完成,双方建立可信身份与共享会话密钥。
- 后续业务数据通过对称加密安全传输。
4. 总结
TLS 握手的核心目标是:
- 协商安全参数(协议版本、密码组合)
- 验证通信身份(证书、签名、证书链)
- 安全生成共享会话密钥(用于后续对称加密)
理解数字证书、数字签名和证书链,是理解 HTTPS 安全性的关键。





