TLS
TLS 为通信提供机密性、完整性和端点认证。HTTPS 用安全通道传输 HTTP。本文以 TLS 1.3 证书握手为主,负责身份验证和密钥保护。
1. 面试核心
先记住这几条,再读正文- 证书认证。 证书关联身份与公钥,客户端验证信任链、有效期和主机名。
- 密钥协商。 TLS 1.3 的证书握手用临时密钥交换派生流量密钥。卡 · 面试核心
- 数据加密。 应用数据用对称 AEAD 加密并验证完整性。
- 重放风险。 TLS 1.3 的 0-RTT 数据有重放风险,业务需约束重复效果。卡 · 前向保密与早期数据
- 站点与协议选择。 SNI 指定目标服务器名称,ALPN 协商 h2 等应用协议。卡 · SNI 与 ALPN
2. 证书与握手
典型 TLS 1.3 完整证书握手使用临时 (EC)DHE。双方过程如下:
- 客户端发送 ClientHello,提供算法和 key share。
- 服务端返回 ServerHello,选择算法并提供 key share。
- 双方根据密钥交换结果派生握手密钥。
- 服务端发送证书、CertificateVerify 和 Finished。
- 客户端验证证书与握手证明,再返回 Finished。
证书签名将身份与公钥联系起来。CertificateVerify 证明服务端持有证书对应私钥。Finished 校验握手上下文的完整性。
客户端检查信任链、有效期和目标名称。名称校验以证书 SAN 中的身份为依据。只检查证书由可信 CA 签发,仍缺少目标身份核对。
3. SNI 与 ALPN
SNI 在 ClientHello 中携带目标服务器名称。共享 IP 的服务端据此选择证书和配置。ALPN 协商应用协议,例如 HTTP/2 的 h2。
两者发生在 HTTP 请求之前。HTTP Host 则属于应用层请求信息。普通 ClientHello 中的 SNI 可被链路观察者看到。
4. 记录加密与会话恢复
握手后,双方使用流量密钥保护应用记录。TLS 1.3 使用 AEAD,兼顾加密与完整性验证。证书公钥负责身份验证,业务记录使用对称密码。
会话恢复使用已有会话派生的 PSK。恢复握手可减少认证成本。客户端和服务端仍需管理票据有效期与密钥轮换。
典型完整握手需要 1-RTT 后发送客户端应用数据。需要 HelloRetryRequest 时,会增加一次往返。这里的时间不含 TCP 建连。
5. 前向保密与早期数据
临时 (EC)DHE 的共享秘密依赖本次临时私钥。服务端证书私钥事后泄露,也无法直接恢复过去的会话密钥。这种性质称为前向保密,前提是临时秘密已安全删除。
TLS 1.3 移除了静态 RSA 密钥传输。它的 PSK 恢复可结合 DHE,也可采用纯 PSK。纯 PSK 模式缺少临时 DHE 带来的前向保密。
0-RTT 允许客户端在恢复握手时发送早期数据。早期数据缺少前向保密,并存在跨连接重放风险。扣款等操作应禁用早期执行,或提供应用级防重放机制。服务端拒绝早期数据后,客户端还需决定是否重发。
6. 使用边界
TLS 终止端能够读取明文。浏览器到网关、网关到后端是独立保护区段。每一段都要明确证书验证和加密配置。
TLS 认证通信端点。用户登录和资源权限由应用处理,见认证与授权。
7 · 面试题卡片
本页题目与参考回答
7.1 HTTPS 中证书、密钥交换和对称加密分别负责什么?
考察重点:证书身份验证、会话密钥派生与应用权限检查的边界。
参考回答
证书与握手签名用于验证服务器身份。
临时密钥交换让双方派生流量密钥。对称 AEAD 保护后续应用数据。客户端要核验信任链、有效期和主机名。业务权限仍由应用检查。
7.2 TLS 1.3 的前向保密与 0-RTT 重放风险是什么关系?
考察重点:临时密钥、PSK 和早期数据边界。
相关内容:前向保密与早期数据。
参考回答
临时 DHE 保护过去会话免受证书私钥后续泄露影响。
0-RTT 早期密钥尚未加入本次 DHE 结果。早期数据缺少前向保密,也可被重放。因此写操作需要应用级防重放,或等待握手完成。
7.3 同一 IP 上的 HTTPS 服务怎样选择证书和 HTTP 版本?
考察重点:SNI、ALPN 与 HTTP Host 的时机。
相关内容:SNI 与 ALPN。
参考回答
服务端根据 ClientHello 中的 SNI 选择目标站点配置和证书。
ALPN 协商 h2 等应用协议。HTTP Host 位于后续应用请求中。它的出现时间晚于 TLS 的证书选择。