TLS — 传输层安全协议
一句话概括
TLS(Transport Layer Security)是传输层安全协议,为网络通信提供加密、身份认证和数据完整性保护。 它是 HTTPS 的底层安全基础,前身为 SSL(已弃用)。
核心功能
| 功能 | 说明 | 解决什么问题 |
|---|---|---|
| 加密(Confidentiality) | 使用对称加密保护传输数据 | 防止窃听(Eavesdropping) |
| 身份认证(Authentication) | 使用数字证书验证服务器(可选验证客户端) | 防止假冒服务器 |
| 完整性(Integrity) | 使用 MAC(消息认证码)检测篡改 | 防止数据被中间人篡改 |
TLS 握手流程(简化版)
客户端 服务器
│ │
│ ── ClientHello ──────────→ │ (支持的 TLS 版本、密码套件)
│ │
│ ←─ ServerHello ─────────── │ (选定的版本、密码套件)
│ ←─ Certificate ────────── │ (服务端数字证书,含公钥)
│ ←─ ServerHelloDone ────── │
│ │
│ ── ClientKeyExchange ───→ │ (用证书公钥加密的 Pre-Master Secret)
│ ── ChangeCipherSpec ────→ │ (后续用对称加密通信)
│ ── Finished ─────────────→ │
│ │
│ ←─ ChangeCipherSpec ───── │
│ ←─ Finished ───────────── │
│ │
│ === 安全通道已建立 === │
│ (使用对称密钥加密通信) │
要点:
- 非对称加密 用于握手阶段,安全交换对称密钥
- 数字证书 提供公钥和身份证明
- 握手完成后切换为 对称加密(性能更优)
证书链与信任模型
CA 证书链
根 CA(Root CA,自签名,预置于操作系统/浏览器的信任库)
└── 中间 CA(Intermediate CA)
└── 服务器证书(Server Certificate,由中间 CA 签发)
- 操作系统/浏览器内置了约 100-150 个受信任的根 CA 证书
- 服务器必须提供完整的证书链(服务器证书 → 中间 CA → 根 CA)
- 验证时:从服务器证书开始,逐级向上追溯,直到找到受信任的根 CA
证书验证内容
| 检查项 | 说明 |
|---|---|
| 签名验证 | 上级 CA 的签名是否有效 |
| 有效期 | 证书是否在有效期内(notBefore ~ notAfter) |
| 域名匹配 | 证书 CN/SAN 是否匹配访问的域名 |
| 吊销状态 | 检查 CRL(证书吊销列表)或 OCSP(在线状态协议) |
| 信任锚 | 证书链最终追溯到受信任的根 CA |
--insecure / -k 做了什么?
选项如 curl -k、helm registry login --insecure 的作用:
- 跳过证书验证:不验证服务器证书的签名、有效期、域名匹配
- 跳过信任链检查:不追溯 CA 证书链
- TLS 加密仍存在:通信仍然加密,但 无法确认对方身份
⚠️
--insecure并没有禁用 TLS 加密,而是放弃了身份认证。这相当于:你和一个自称是你朋友的人用加密电话通话,但你没有核实对方是不是真的你朋友。
为什么 --insecure 有风险?
| 风险 | 说明 |
|---|---|
| MITM 攻击 | 攻击者可以插入自己的证书,客户端无法察觉。详见 MITM-中间人攻击 |
| 钓鱼攻击 | 攻击者可以伪装成合法服务,获取敏感信息 |
| 数据泄露 | 虽然加密,但数据发给了冒牌服务器 |
安全替代方案:
- 将自签名 CA 证书添加到系统信任库(推荐)
- 使用
SSL_CERT_FILE环境变量(如 Helm) - 使用
--cacert指定 CA 证书(如 curl)
HTTPS = HTTP over TLS
HTTPS = HTTP + TLS
默认端口:443
浏览器地址栏的 🔒 锁图标表示:
- ✅ TLS 加密已建立
- ✅ 服务器证书已验证(域名匹配、未过期、受信任)
- ✅ 数据传输是安全的
关联笔记
- MITM-中间人攻击 — TLS 要防御的核心威胁
- 数据加密-AES-GCM — TLS 使用的对称加密算法
- curl-命令详解 — curl 的
-k选项与 TLS 调试 - tcpdump-常见场景示例 — TLS 握手抓包分析
- 四层与七层负载均衡对比 — TLS 终止(TLS Termination)与负载均衡