05 · TLS 与证书
HTTPS 的"绿锁"背后是 TLS 握手与证书信任链。本篇讲协议细节:握手怎么协商密钥、证书怎么被信任、常见的
SSL_ERROR是哪一层出错。S04 传输安全 讲安全实践,本篇只讲原理。
速览卡
| 项 | 内容 |
|---|---|
| 一句话定位 | TLS 握手、证书信任链与常见错误的协议原理 |
| 核心内容 | 握手流程、非对称+对称加密、信任链、常见错误 |
| 读完能回答 | 为什么握手能安全交换密钥?证书过期为何报错? |
| 相关板块 | N04 HTTP | S04 传输安全 | N11 抓包 |
一、握手在做什么:三步共识
text
① 客户端问候 ClientHello(支持的版本/算法/随机数)
② 服务端返回 ServerHello + 证书 + 密钥交换参数
③ 双方各自算出会话密钥 → 切换加密 → 结束核心思想:用非对称加密安全地协商出一个对称会话密钥,之后数据都用对称密钥加密(快得多)。
二、为什么需要两种加密
| 加密 | 快慢 | 用途 |
|---|---|---|
| 非对称(RSA/ECDSA) | 慢 | 握手阶段传递密钥材料、签名验证 |
| 对称(AES/ChaCha20) | 快 | 建立会话后的批量数据 |
心智模型:非对称像"保险箱 + 钥匙",对称像"同一把钥匙开锁"。用慢的保险箱把快钥匙安全交给对方,之后一路快。
三、证书与信任链
text
根证书 ──签发──> 中间证书 ──签发──> 你的站点证书| 概念 | 说明 |
|---|---|
| 证书 | 包含域名、公钥、有效期、签名 |
| 信任链 | 逐级验证签名,直到本机信任的根证书 |
| 有效期 | 证书过期即不可信 |
| 域名匹配 | 证书里的 SAN 必须匹配访问的域名 |
浏览器报"不安全",通常是三种之一:证书过期、域名不匹配、签发机构不受信任(自签证书 / 被吊销)。
四、TLS 1.2 vs 1.3
| 版本 | 握手 RTT | 特点 |
|---|---|---|
| 1.2 | 2 RTT | 老但兼容广 |
| 1.3 | 1 RTT | 精简握手、更快的 0-RTT 恢复、移除弱算法 |
迁移到 1.3 是收益明显的低成本优化:少一个 RTT,移动端弱网尤其明显。
五、常见错误与定位
| 现象 | 原因层 | 处理 |
|---|---|---|
certificate expired | 证书过期 | 续期(现多自动续期) |
hostname mismatch | 域名不匹配 | 检查证书 SAN |
self-signed certificate | 不受信任 | 内网才考虑,别在生产关校验 |
handshake failure | 算法/版本不兼容 | 看服务端支持的协议与套件 |
| 客户端报错但浏览器正常 | 客户端证书库旧 | 更新根证书 |
六、自检清单
- [ ] 能画出 TLS 握手的三步共识
- [ ] 能说清非对称与对称加密的分工
- [ ] 能解释证书信任链的验证过程
- [ ] 能根据浏览器报错判断是哪一层问题
- [ ] 知道 TLS 1.3 相比 1.2 省了什么
七、常见误区
| 误区 | 事实 |
|---|---|
| "证书加密了所有数据" | 加密靠会话密钥,证书只负责身份与公钥分发 |
| "自签证书改改就能上生产" | 生产应关闭校验,属于安全事件 |
| "HTTPS 一定慢很多" | 握手可复用,1.3 + 会话恢复成本很低 |
| "过期才是不安全" | 域名不匹配、被吊销同样不可信 |
八、动手练习
练习 A:看证书链
用浏览器访问任意 HTTPS 站点,打开"证书详情",观察信任链的每一级签发关系。
练习 B:看握手
openssl s_client -connect example.com:443 观察握手输出,找 New, TLSv1.3 与证书链。
练习 C:本地复现
用 openssl 自签一张证书配置到本地服务,访问观察浏览器报错文案,再手动信任观察变化。
相关文档
本区
- 04 · HTTP 与 HTTPS 深入 —— HTTPS 在协议栈的位置
- 11 · 抓包与网络调试 —— 用抓包看握手与错误
其他域
- S04 · 传输安全与 TLS 实践 —— 部署与加固实践
- 浏览器与网络 —— 浏览器侧的证书告警