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 ─────────────   │
  │                              │
  │  === 安全通道已建立 ===       │
  │  (使用对称密钥加密通信)        │

要点:

  1. 非对称加密 用于握手阶段,安全交换对称密钥
  2. 数字证书 提供公钥和身份证明
  3. 握手完成后切换为 对称加密(性能更优)

证书链与信任模型

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 -khelm registry login --insecure 的作用:

  1. 跳过证书验证:不验证服务器证书的签名、有效期、域名匹配
  2. 跳过信任链检查:不追溯 CA 证书链
  3. TLS 加密仍存在:通信仍然加密,但 无法确认对方身份

⚠️ --insecure 并没有禁用 TLS 加密,而是放弃了身份认证。这相当于:你和一个自称是你朋友的人用加密电话通话,但你没有核实对方是不是真的你朋友。


为什么 --insecure 有风险?

风险说明
MITM 攻击攻击者可以插入自己的证书,客户端无法察觉。详见 MITM-中间人攻击
钓鱼攻击攻击者可以伪装成合法服务,获取敏感信息
数据泄露虽然加密,但数据发给了冒牌服务器

安全替代方案:

  • 将自签名 CA 证书添加到系统信任库(推荐)
  • 使用 SSL_CERT_FILE 环境变量(如 Helm)
  • 使用 --cacert 指定 CA 证书(如 curl)

HTTPS = HTTP over TLS

HTTPS = HTTP + TLS
默认端口:443

浏览器地址栏的 🔒 锁图标表示:

  1. ✅ TLS 加密已建立
  2. ✅ 服务器证书已验证(域名匹配、未过期、受信任)
  3. ✅ 数据传输是安全的

关联笔记