TLS 与 HTTPS:从握手到证书信任链
0. 元信息
- 主题路径:
docs/topics/network/subtopics/tls-and-https/ - 父主题:
network - 主分类:安全与可靠性
- 辅助分类:计算机基础
- 适合对象:理解 TCP 连接、HTTP 请求和 DNS 解析,想排查 HTTPS 故障的开发者
- 建议周期:4~5 周(每周 6~8 小时,含抓包、证书检查、服务配置)
- 前置知识:
tcp-and-udp;会用curl、dig、tcpdump - 最终目标:能画出 TLS 1.2/1.3 握手,验证 X.509 证书链,解释 PKI、HSTS、OCSP Stapling,并用 OpenSSL 定位常见 HTTPS 故障
1. 学习路线
机密性、完整性、身份认证
→ 哈希、MAC、数字签名
→ 对称加密与 AEAD
→ 非对称加密与密钥交换
→ TLS Record 与 CipherSuite
→ TLS 1.2 握手
→ TLS 1.3 握手与 0-RTT
→ X.509 证书与 PKI 信任链
→ HTTPS、SNI、ALPN
→ HSTS、OCSP Stapling、CT
→ OpenSSL 与浏览器排障
每学一个机制,我都问三件事:保护了什么、信任谁、失败时看到什么。
2. 阶段周数分配
| 阶段 | 4 周方案 | 5 周方案 | 备注 |
|---|---|---|---|
| 1. 密码学积木 | 0.5 周 | 0.75 周 | 哈希、MAC、签名、AEAD |
| 2. TLS Record 与 CipherSuite | 0.5 周 | 0.5 周 | 密钥交换、认证、加密套件 |
| 3. TLS 1.2 握手 | 0.5 周 | 0.75 周 | 两个 RTT,抓包画时序 |
| 4. TLS 1.3 握手 | 0.75 周 | 1 周 | 1-RTT、会话恢复、0-RTT |
| 5. X.509 与 PKI | 0.75 周 | 1 周 | SAN、Key Usage、证书链 |
| 6. HTTPS 防护 | 0.5 周 | 0.5 周 | HSTS、OCSP Stapling、CT |
| 7. 综合排障 | 0.5 周 | 0.5 周 | OpenSSL、curl、testssl.sh |
3. 九阶段表
| 阶段 | 核心知识 | 实践产出 | 可观察学会标准 |
|---|---|---|---|
| 1. 安全目标 | 机密性、完整性、认证、前向保密 | 一张威胁与机制对照表 | 能说明 TLS 不隐藏 IP 和域名解析 |
| 2. 密码学积木 | AES-GCM、ChaCha20-Poly1305、SHA-256、HMAC、ECDSA | 用 OpenSSL 算摘要并验签 | 能区分加密、哈希、MAC、签名 |
| 3. 密钥交换 | RSA、(EC)DHE、共享秘密、HKDF | 画 ECDHE 交换图 | 能解释前向保密为何依赖临时密钥 |
| 4. TLS 1.2 | ClientHello、ServerHello、Certificate、ServerKeyExchange、Finished | 一份 TLS 1.2 抓包 | 能指出协商 CipherSuite 和证书的位置 |
| 5. TLS 1.3 | key_share、EncryptedExtensions、1-RTT、PSK、0-RTT | 一份 TLS 1.3 抓包 | 能解释 1.3 删除了哪些旧算法和消息 |
| 6. X.509 | Subject、Issuer、SAN、Validity、Basic Constraints、Key Usage | 解读一张公网证书 | 能判断域名、有效期、用途是否匹配 |
| 7. PKI | Root CA、Intermediate CA、leaf、trust store、路径验证 | 手工整理 example.com 信任链 | 能解释根证书为何常不由服务器发送 |
| 8. HTTPS 防护 | SNI、ALPN、HSTS、OCSP Stapling、CT | 检查一个站点的响应头和 stapling | 能分清证书吊销、透明度和强制 HTTPS |
| 9. 排障 | hostname mismatch、expired、unknown CA、链缺失、协议不兼容 | 一份故障诊断报告 | 能从 verify code 和握手消息给出修复项 |
4. 第一周任务
| 日 | 任务 | 当天交付 |
|---|---|---|
| Day 1 | 安装 OpenSSL、curl、Wireshark/tshark、testssl.sh;记录版本 | 工具版本与运行约定 |
| Day 2 | 用 openssl dgst -sha256、openssl rand -hex 32 观察摘要和随机数 | 命令与输出记录 |
| Day 3 | 对比 AES-GCM、ChaCha20-Poly1305、RSA、ECDHE 的职责 | 一张职责表 |
| Day 4 | 运行 openssl s_client -connect example.com:443 -tls1_3 -servername example.com | 握手输出与协议、CipherSuite 标注 |
| Day 5 | 保存 leaf 证书,运行 openssl x509 -in cert.pem -text -noout | SAN、Issuer、Validity 标注 |
| Day 6 | 用 curl -Iv https://example.com 检查证书验证、ALPN、响应头 | 一份 HTTPS 连接记录 |
| Day 7 | 项目:检查一个公网 HTTPS 站点,覆盖握手、证书链、HSTS、OCSP Stapling | 可复现命令 + 输出 + 判断 |
Day 7 拆解
步骤 A —— 最小可用(60 分钟)
- 运行
openssl s_client -connect example.com:443 -tls1_3 -servername example.com -showcerts </dev/null; - 记录协议、CipherSuite、证书 Subject/Issuer、
Verify return code; - 用
curl -sI https://example.com查看是否有Strict-Transport-Security; - 保存原始输出,不只写结论。
步骤 B —— 补齐四类边界(45 分钟)
- 不传
-servername,观察 SNI 相关差异; - 改用
-tls1_2,对比握手和 CipherSuite; - 运行
openssl s_client -connect example.com:443 -servername example.com -status </dev/null检查 OCSP Stapling; - 运行
testssl.sh example.com,记录弱协议、弱算法、证书链告警。
5. 阶段通用验收
- 不看资料画出 TLS 1.2 和 TLS 1.3 时序图;
- 用自己的话区分对称加密、非对称加密、签名和密钥交换;
- 从证书文本中找出 SAN、Issuer、Validity、Public Key、Key Usage;
- 测试域名不匹配、过期证书、不受信 CA、缺失中间证书四类错误;
- 至少检查 3 个站点,保存实际命令和输出;
- 能解释 HSTS、OCSP Stapling、CT 各自处理的问题;
- 能修改服务端证书链或 TLS 配置,再用客户端验证。
6. 最终验收
- 独立讲清 TLS 1.2/1.3 完整握手和会话恢复;
- 独立验证一条 Root CA → Intermediate CA → leaf 证书链;
- 完成至少 8 个实验:1.2、1.3、SNI、ALPN、证书解析、主机名验证、OCSP Stapling、HSTS;
- 完成 1 个综合项目:部署本地 HTTPS 服务,制造并修复至少 4 类证书或协议故障;
- 用 15 分钟讲清浏览器访问
https://example.com后发生的 DNS、TCP、TLS、HTTP 流程。
7. 综合项目
首选:HTTPS 故障实验室。用 Nginx 或 Caddy 部署本地 HTTPS 服务。自己创建 Root CA、Intermediate CA 和 leaf 证书。让客户端信任测试 Root CA。
备选:公网证书健康检查报告 / TLS 1.2 与 1.3 性能对比 / 内网 mTLS 小实验。
项目必做要求:
- 场景说明:域名、网络拓扑、客户端信任库;
- 证书生成:Root、Intermediate、leaf 的配置与命令;
- 服务配置:完整链、私钥权限、协议和 CipherSuite;
- 故障注入:过期、SAN 不匹配、链缺失、unknown CA;
- 验证命令:OpenSSL、curl、testssl.sh 各至少一次;
- 边界测试:TLS 1.2/1.3、带 SNI/不带 SNI;
- README:依赖、运行、清理步骤;
- 记录:原始错误、修复动作、修复后证据。
交付物放到项目仓库的 notes/:design.md、test.md、retrospective.md。
本主题贡献
本主题沉淀 TLS 1.2/1.3 TLS handshake 消息、X.509 PKI 路径验证、SNI/ALPN/HSTS/OCSP Stapling 工程化,所有结论用 openssl s_client + testssl.sh + Wireshark(配 SSLKEYLOGFILE)三角验证。
职责(3 项)
- 画 TLS 1.2 两次 RTT 握手(ClientHello/ServerHello/Certificate/ServerKeyExchange/Finished)与 TLS 1.3 一次 RTT 握手(ClientHello key_share + EncryptedExtensions + Finished),能解释 ECDHE 前向保密为何依赖临时密钥;
- 从
openssl x509 -text中读 Subject/Issuer/SAN/Validity/Key Usage,用verify -CAfile构造 leaf → Intermediate → Root 路径,能定位 hostname mismatch、过期、未知 CA、链缺失四类故障; - 配服务端 TLS 1.3 优先 + 完整链 + OCSP Stapling,用
openssl s_client -status验证 stapled response,用curl -I看 HSTS 头,能解释 ALPN 协商 h2 vs http/1.1,以及为什么 Root CA 通常不由服务端发送。
交付物(4 项)
- 一份 TLS 1.3 握手
openssl s_client -tls1_3 -servername example.com -showcerts输出,含协议、CipherSuite、Subject/Issuer、Verify return code 标注; testssl.sh example.com扫描报告,列出弱协议/弱算法/证书链告警(关注 SSLv3/TLS1.0/RC4/SHA-1);- 本地 Root CA + Intermediate CA + leaf 自签链 + Nginx/Caddy 配置,能复现 hostname mismatch、过期、未知 CA、链缺失四类故障的客户端错误;
- OCSP Stapling 验证记录(
openssl s_client -connect ... -status)与 HSTS 响应头检查(Strict-Transport-Security)。
指标(3 项)
- TLS 握手 RTT ≤ 1.5 RTT(TLS 1.3 启用后,相对 1.2 减半);
- 公网站点 TLS 1.3 启用率 ≥ 90%(testssl.sh 抽样 10 个域名统计);
- OCSP Stapling 命中率 ≥ 95%(
openssl s_client -status返回OCSP Response Status: successful)。
8. 推荐开源资料
| 角色 | 资料 | 链接 | 用法 |
|---|---|---|---|
| 协议标准 | RFC 8446 — TLS 1.3 | https://www.rfc-editor.org/rfc/rfc8446 | 主线规范 |
| 协议标准 | RFC 5246 — TLS 1.2 | https://www.rfc-editor.org/rfc/rfc5246 | 对照旧握手 |
| PKI 标准 | RFC 5280 — X.509 PKIX | https://www.rfc-editor.org/rfc/rfc5280 | 路径验证与扩展 |
| HTTPS 标准 | RFC 9110 / RFC 9112 | https://www.rfc-editor.org/rfc/rfc9110 | HTTP 语义与 HTTP/1.1 |
| 工具手册 | OpenSSL s_client | https://docs.openssl.org/master/man1/openssl-s_client/ | 握手调试 |
| 工具手册 | OpenSSL x509 | https://docs.openssl.org/master/man1/openssl-x509/ | 证书解析 |
| 服务检查 | testssl.sh | https://github.com/testssl/testssl.sh | 外部 TLS 配置扫描 |
| 浏览器策略 | MDN HSTS | https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security | HSTS 行为 |
| 可视化 | The Illustrated TLS 1.3 Connection | https://tls13.xargs.org/ | 字节级看握手 |
testssl.sh 使用 GPL-2.0 许可证。OpenSSL 使用 Apache-2.0。复制脚本或代码前要看对应 LICENSE。
9. 学习资料汇聚(v0.3 自包含)
本节由本计划生成。资料按用途筛选。协议行为以 RFC 和实现文档为准。
9.1 背景与动机
HTTP 明文可被链路上的节点读取和修改。早期 SSL 把加密、完整性和服务器身份认证带到 Web。SSL 2.0/3.0 已淘汰。TLS 接替它们,TLS 1.2 曾长期占主流,TLS 1.3 删掉了脆弱算法并缩短握手。
HTTPS 是 HTTP over TLS。它依赖 PKI 把域名绑定到公钥。浏览器和操作系统维护 Root CA 信任库。服务器通常发送 leaf 和 Intermediate CA,客户端据此构造到受信根的路径。
我们学它,是因为证书过期、链缺失、SNI 错配、协议版本冲突都很常见。会看握手和证书链,排障就不靠猜。
9.2 概念地图
flowchart LR
HTTP --> HTTPS
HTTPS --> TLS
TLS --> Record[Record Protocol]
TLS --> HS[Handshake]
HS --> KX[ECDHE 密钥交换]
HS --> Auth[证书签名认证]
KX --> Secret[共享秘密]
Secret --> HKDF
HKDF --> AEAD[AES-GCM / ChaCha20-Poly1305]
Auth --> Leaf[leaf 证书]
Leaf --> Intermediate[Intermediate CA]
Intermediate --> Root[Root CA / trust store]
Leaf --> SAN[SAN 域名]
HTTPS --> HSTS
Auth --> OCSP[OCSP Stapling]
Auth --> CT[Certificate Transparency]
HS --> SNI
HS --> ALPN
TLS Handshake 协商版本、算法和密钥,并认证服务器。Record Protocol 用协商出的密钥保护应用数据。X.509 链回答“这个公钥能否代表该域名”。HSTS、OCSP Stapling、CT 分别约束降级、提供吊销状态、公开证书签发记录。
9.3 基础知识讲解
经典论文 / RFC
| 资料 | 角色 | 评分 | 链接 |
|---|---|---|---|
| RFC 8446 — TLS 1.3 | 当前 TLS 主规范 | 5 | https://www.rfc-editor.org/rfc/rfc8446 |
| RFC 5246 — TLS 1.2 | 旧版握手与部署基线 | 5 | https://www.rfc-editor.org/rfc/rfc5246 |
| RFC 5280 — Internet X.509 PKI | 证书路径验证 | 5 | https://www.rfc-editor.org/rfc/rfc5280 |
| RFC 6066 — TLS Extensions | SNI 等扩展 | 4 | https://www.rfc-editor.org/rfc/rfc6066 |
| RFC 6960 — OCSP | 在线证书状态 | 4 | https://www.rfc-editor.org/rfc/rfc6960 |
| RFC 6797 — HSTS | 强制 HTTPS | 4 | https://www.rfc-editor.org/rfc/rfc6797 |
经典书籍
| 资料 | 角色 | 评分 | 链接 |
|---|---|---|---|
| 《Bulletproof TLS and PKI》Ivan Ristić | TLS 部署和 PKI 排障 | 5 | https://www.feistyduck.com/books/bulletproof-tls-and-pki/ |
| 《Serious Cryptography》Jean-Philippe Aumasson | 现代密码学工程 | 4 | https://nostarch.com/seriouscrypto |
| 《Cryptography Engineering》Ferguson、Schneier、Kohno | 密码系统设计 | 4 | https://www.schneier.com/books/cryptography-engineering/ |
| 《Network Security with OpenSSL》Viega、Messier、Chandra | OpenSSL 实践 | 4 | https://www.oreilly.com/library/view/network-security-with/059600270X/ |
优秀博客
| 资料 | 角色 | 评分 | 链接 |
|---|---|---|---|
| The Illustrated TLS 1.3 Connection | TLS 1.3 字节级图解 | 5 | https://tls13.xargs.org/ |
| Cloudflare Learning Center — TLS | Web 场景短文 | 4 | https://www.cloudflare.com/learning/ssl/transport-layer-security-tls/ |
| Mozilla SSL Configuration Generator | 服务端安全配置 | 5 | https://ssl-config.mozilla.org/ |
| Let’s Encrypt — How It Works | ACME 与自动签证书 | 4 | https://letsencrypt.org/how-it-works/ |
| Scott Helme — HSTS | HSTS 实战与风险 | 4 | https://scotthelme.co.uk/hsts-the-missing-link-in-tls/ |
核心人物
| 人物 | 贡献 | 关键出处 |
|---|---|---|
| Taher Elgamal | 领导 Netscape SSL 3.0 设计 | SSL 历史与 ElGamal 签名体系 |
| Eric Rescorla | TLS 1.3 主编辑,长期参与 TLS 标准 | RFC 8446 |
| Tim Dierks | TLS 1.0 共同编辑 | RFC 2246 |
| Christopher Allen | TLS 1.0 共同编辑 | RFC 2246 |
| Peter Gutmann | X.509、PKI 与加密工程研究 | cryptlib 与 PKI 分析 |
开发方法
| 方法 | 适用 | 关键点 |
|---|---|---|
| 从客户端视角复现 | HTTPS 故障 | 保留域名、端口、SNI、信任库和原始错误 |
| 握手逐层排查 | 连接失败 | DNS → TCP → ClientHello → ServerHello → Certificate → Finished |
| 双版本对比 | 版本或算法冲突 | 分别强制 -tls1_2 与 -tls1_3 |
| 证书链逐张检查 | unknown CA、链缺失 | 看 Subject/Issuer、Basic Constraints、AKI/SKI、有效期 |
| 独立工具交叉验证 | 避免单一客户端缓存 | OpenSSL、curl、浏览器、testssl.sh 互相验证 |
| 最小安全配置 | 服务端部署 | 禁用 SSL 与 TLS 1.0/1.1,优先 TLS 1.3,保留必要兼容性 |
9.4 经典问题与经典案例
| # | 问题 | 为什么重要 | 最简答案 |
|---|---|---|---|
| 1 | 对称与非对称加密怎么分工 | 非对称运算贵 | ECDHE 交换秘密,签名认证,AEAD 加密数据 |
| 2 | TLS 1.3 为何更快 | 握手延迟影响首包 | 完整握手通常 1-RTT,恢复可 0-RTT |
| 3 | 0-RTT 为什么危险 | 数据可被重放 | 只用于可重放也安全的幂等操作 |
| 4 | 证书域名不匹配 | 攻击者可能拿别的合法证书冒充 | 按 SAN 验证目标 hostname,不靠 CN |
| 5 | 服务器为何不发 Root CA | 客户端必须独立信任根 | 服务端发 root 没法创建信任,只浪费流量 |
| 6 | 缺少 Intermediate CA | 客户端无法构造路径 | 服务端配置 leaf 后接完整中间链 |
| 7 | OCSP Stapling 有什么用 | 客户端直连 CA 暴露访问且慢 | 服务端缓存并附带 CA 签名的状态响应 |
| 8 | HSTS 能否阻止首次降级 | 普通 HSTS 首次访问前未知 | preload 可覆盖首次访问,但加入前要评估子域 |
| 9 | CT 能否代替证书验证 | CT 只公开签发记录 | 仍需路径、域名、时间、用途等验证 |
| 10 | SNI 为什么关键 | 一个 IP 托管多个证书 | ClientHello 携带目标域名,服务端选证书 |
9.5 学习难点
概念难点
| 难点 | 为什么会卡 | 突破路径 |
|---|---|---|
| 加密、签名、MAC 混淆 | 都出现密钥和摘要 | 写清谁持有密钥、谁验证、是否提供机密性 |
| CipherSuite 名称变化 | TLS 1.2 名称含密钥交换和签名,1.3 只描述 AEAD 与 hash | 把版本和套件拆开读 |
| 信任链方向 | leaf 指向 issuer,验证却从受信锚判断 | 画 leaf → intermediate → root,再标 trust store |
| 主机名与 Subject 混淆 | 老资料强调 CN | 现代客户端按 SAN 验证 |
思维难点
| 难点 | 为什么会卡 | 突破路径 |
|---|---|---|
| “加密”不等于“可信” | 自签证书也能加密 | 分开检查通道加密和身份认证 |
| 路径构造与路径验证 | 客户端可能从本地缓存补链 | 用空白容器和指定 -CAfile 重测 |
| 0-RTT 与 0-RTT 安全 | 更快常被误读成同等安全 | 用重复扣款请求模拟重放风险 |
| 吊销的现实行为 | 客户端策略差异大 | 分别检查 OCSP、stapling、浏览器实现 |
工程难点
| 难点 | 为什么会卡 | 突破路径 |
|---|---|---|
s_client 默认不验证 hostname | 握手成功被误认为域名可信 | 加 -verify_hostname example.com 和信任参数 |
| SNI 遗漏 | 多租户站点返回默认证书 | 始终传 -servername |
| PEM 链顺序错误 | 服务能启动,客户端仍报链错 | leaf 在前,后接 Intermediate CA,不放 root |
| 私钥与证书不匹配 | 更新证书时拿错 key | 比较公钥摘要,不比较文件名 |
| 容器信任库过旧 | 浏览器正常,容器失败 | 更新 ca-certificates,确认系统时间 |
9.6 技术标准与接口
9.6.1 Entity
| 名称 | 版本 | 发布组织 | 状态 | 许可证 / 可访问性 |
|---|---|---|---|---|
| TLS | 1.3 / RFC 8446 | IETF TLS WG | 现行标准 | 免费公开 |
| TLS | 1.2 / RFC 5246 | IETF TLS WG | 广泛兼容,旧版 | 免费公开 |
| PKIX Certificate Profile | RFC 5280 | IETF LAMPS 前身工作范围 | 现行基础规范 | 免费公开 |
| OCSP | RFC 6960 | IETF PKIX | 现行标准 | 免费公开 |
| HSTS | RFC 6797 | IETF WebSec | 现行标准 | 免费公开 |
| Certificate Transparency | RFC 9162 | IETF TRANS | CT v2 标准 | 免费公开 |
| OpenSSL | 3.x | OpenSSL Project | 活跃实现 | Apache-2.0 |
9.6.2 Scope
- TLS:保护传输中的应用数据,提供机密性、完整性和端点认证。它不隐藏 IP、流量大小或时序。
- X.509/PKIX:规定证书字段、扩展和路径验证。它不决定浏览器具体信任哪些 Root CA。
- OCSP:查询证书状态。OCSP Stapling 把响应附在握手中。
- HSTS:让用户代理在指定时间内只用 HTTPS。它不修复证书错误。
- CT:记录公开信任证书的签发。它帮助发现误签,不替代证书验证。
- HTTPS:HTTP 语义运行在 TLS 之上。HTTP/3 则运行在 QUIC 内置的 TLS 1.3 机制上。
9.6.3 Structure
TLS 1.3 完整握手关键消息:
ClientHello(key_share, supported_versions, SNI, ALPN)
→ ServerHello(key_share, selected_version)
→ EncryptedExtensions
→ Certificate
→ CertificateVerify
→ Finished
→ Client Finished
→ Application Data
必须掌握的字段和接口:
- ClientHello:
supported_versions、cipher_suites、key_share、server_name、ALPN; - X.509:Subject、Issuer、SAN、Validity、Basic Constraints、Key Usage、Extended Key Usage、SKI、AKI;
- 验证结果:链是否到受信锚、hostname 是否匹配、时间是否有效、用途是否允许;
- OpenSSL:
s_client、x509、verify、req、pkey; - HTTP:
Strict-Transport-Security响应头; - OCSP:
status_request扩展和 stapled response。
9.6.4 Ecosystem
- TLS 实现:OpenSSL、BoringSSL、LibreSSL、GnuTLS、NSS、rustls、Go
crypto/tls; - CA 与自动化:Let’s Encrypt、ACME、certbot、step-ca、云厂商证书服务;
- 客户端信任库:Mozilla NSS、Windows Root Store、Apple trust store、Java
cacerts、Linuxca-certificates; - 服务端:Nginx、Apache httpd、Caddy、Envoy、HAProxy;
- 观测工具:OpenSSL、curl、Wireshark、testssl.sh、SSL Labs;
- 事实标准与规范:浏览器 Root Program、CA/Browser Forum Baseline Requirements 会影响公网证书签发;它们不是 TLS RFC,但部署时必须遵守。
9.6.5 Depth Tiers
| 层级 | 名称 | 必须看到什么 |
|---|---|---|
| L0 | 知道存在 | 知道 HTTPS 使用 TLS,证书把域名绑定到公钥 |
| L1 | 看得懂示例 | 能读 s_client 的协议、CipherSuite、Subject、Issuer、verify code |
| L2 | 能正确调用 | 能检查握手、解析证书、验证 hostname 和信任链 |
| L3 | 能解释与排错 | 能定位版本、SNI、证书链、有效期、信任库、OCSP Stapling 问题 |
| L4 | 能设计与扩展 | 能设计私有 PKI、证书轮换、mTLS 和 TLS 策略,并评估兼容与吊销方案 |
本计划要求达到:L3。做平台安全或 PKI 服务时再进入 L4。
9.6.6 Source
- TLS 1.3:RFC 8446,https://www.rfc-editor.org/rfc/rfc8446
- PKIX:RFC 5280,https://www.rfc-editor.org/rfc/rfc5280
- HSTS:RFC 6797,https://www.rfc-editor.org/rfc/rfc6797
- OCSP:RFC 6960,https://www.rfc-editor.org/rfc/rfc6960
- CT v2:RFC 9162,https://www.rfc-editor.org/rfc/rfc9162
- OpenSSL 文档:https://docs.openssl.org/
- 引用版本快照日期:2026-07-30。
10. 常见误区
- 把 SSL 和 TLS 当成两个都可启用的现代协议。SSL 已淘汰;
- 看到 TCP 443 通就认定 HTTPS 正常。TLS 握手仍可能失败;
- 看到
s_client建连成功就认定证书可信。还要检查 verify code 和 hostname; - 忘传 SNI,拿到默认证书后误判服务配置;
- 只看 CN,不检查 SAN;
- 把 leaf 和 root 拼进 fullchain,却漏掉 Intermediate CA;
- 把 TLS 1.3 CipherSuite 当成包含 ECDHE 和签名算法;
- 允许 0-RTT 执行扣款、发信等非幂等操作;
- 认为 HSTS 能绕过证书错误。浏览器仍会拒绝无效证书;
- 把 OCSP Stapling 当成实时状态。响应有有效期,也可能缺失;
- 认为 CT 能阻止误签。CT 主要让误签可被发现;
- 更新证书后不检查负载均衡器和所有节点,导致轮询时偶发旧证书;
- 用 IP 地址访问只含域名 SAN 的证书,然后怪 CA;
- 忽略系统时间。时间漂移会制造“尚未生效”或“已过期”。
11. 所有知识点分类(统一规则)
- 编程语言
- 数据结构与算法
- 计算机基础:网络协议、密码学基础、PKI
- 工程技术:证书部署、服务配置、调试工具
- Web 与后端:HTTPS、反向代理、浏览器安全策略
- 前端与客户端
- 数据与人工智能
- 项目与职业能力
- 安全与可靠性:TLS、证书信任、加密策略、吊销机制
本计划归属:安全与可靠性 主 + 计算机基础 辅。