网络与协议安全 · kp-018

TLS 原理与配置加固

核心 约 25 分钟 状态:reviewed #TLS#HTTPS#加固#配置

一句话定义

TLS 在不可信网络上建立"服务器身份可信 + 流量加密且完整"的通道:握手阶段完成证书校验与(EC)DHE 密钥交换,随后用对称加密保护记录层;配置加固的意义在于——协议安全不等于部署安全,弱配置可以架空强协议。

为什么重要

HTTPS 已是互联网默认形态,但"上了 TLS"与"配对了 TLS"是两回事:残留弱协议版本、弱套件、缺 HSTS、证书链不完整、私钥管理松散,每一个都在实际事故榜上有名。TLS 配置也是少数能用一行命令(openssl s_client)随时自查的防御面,投入产出比极高。

前置知识

kp-007(非对称与密钥交换):握手的核心机制。 kp-009(数字签名与 PKI):证书校验发生在握手之内。

核心概念

  • 握手目标三件事:验证服务器身份(证书链)、协商会话密钥(ECDHE,临时密钥保证前向保密)、约定对称算法套件。
  • TLS 1.2 与 1.3 的差别:1.3 握手从 2-RTT 压缩到 1-RTT(可 0-RTT 恢复),删除静态 RSA 密钥交换与全部弱算法,强制前向保密;0-RTT 数据无防重放性,只用于幂等请求。
  • 加密套件(Cipher Suite)= 密钥交换 + 签名 + 对称算法 + 哈希/MAC;现代基线:TLS 1.2 保留强套件 + TLS 1.3 全量启用。
  • HSTS:响应头声明期内强制 HTTPS,防 SSL 剥离与用户手输 http 的降级。
  • 运维要素:证书链完整、自动续期、私钥权限与轮换、内部服务间 mTLS(双向认证)。

公式、模型或图示

text
TLS 1.3 握手(简化):
Client ──▶ ClientHello(支持的套件 + ECDHE 公钥参数)
       ◀── ServerHello(选定套件 + ECDHE 公钥参数)+ 证书 + 证书验签
双方 ──▶ 由 ECDHE 共享秘密派生会话密钥 → 记录层 AES-GCM/ChaCha20 加密
保证:前向保密(临时密钥)、完整性(AEAD 标签)、身份(证书链 → kp-009)

原理与机制

TLS 的安全公式 = 协议强度 × 配置强度 × 私钥安全,取最小值。配置层面的失效模式有清晰的清单:协议版本残留(SSLv3/TLS1.0/1.1 有已知攻击,应禁用)、弱套件残留(CBC 组合的填充预言类问题、RC4/3DES 等古董算法)、证书链不全(部分客户端报错,表现为"别人打得开我打不开")、缺 HSTS(首请求可被剥离降级)、私钥复用与宽松权限。验证手段全部是本地命令:openssl s_client -connect host:443 -tls1_2 检查协议协商,curl -v 看证书链与重定向,公开的 TLS 评级服务做全量配置体检。内部服务间通信的进阶做法是 mTLS:双向证书认证把"网络位置信任"替换为"密码学身份",是零信任(kp-021)在传输层的直接实现。

实例或案例

生产 Nginx 加固片段(与 kp-016 的响应头基线配套):

nginx
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...;
ssl_prefer_server_ciphers off;      # 1.3 时代推荐由客户端选
ssl_session_tickets off;            # 稳妥起见关闭会话票据(密钥轮换复杂)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

配合 ACME 自动续期与到期监控,构成完整的"配置 + 运维"闭环。

直观类比

TLS 像带公证的保险通道:先核对对方公证文件(证书链),再现场各出一半密码合成一次性锁钥(ECDHE),之后的每箱货物都封条加锁(AEAD)。配置加固则是别让仓库大门(旧协议端口)和备用钥匙复印件(弱套件/私钥)留在那里。

常见误区

  • "有证书就是安全的":证书只证明身份,协议版本与套件配置决定通道强度。
  • "TLS 1.0 留着兼容老设备":已知攻击使其成为审计扣分项;正确路径是修设备而非留弱点。
  • "内网不用 TLS":内网低层无认证(kp-017),内部明文流量正是横向移动的观测与劫持目标;mTLS 是现代基线。

与其他知识点的关系

  • kp-009(PKI):证书的签发、链与吊销。
  • kp-021(零信任):mTLS 是其传输层支柱。
  • kp-016(安全响应头):HSTS 属响应头基线的一部分。

自测题

  1. TLS 1.3 为什么删除静态 RSA 密钥交换?要点:无前向保密——私钥泄露即历史流量全解;ECDHE 临时密钥解决该问题。
  2. HSTS 防御的具体威胁是什么?要点:SSL 剥离(把用户从 https 降级到 http)与手输域名首跳明文;声明期内浏览器强制 https。
  3. 用什么本地命令验证服务端 TLS 配置?至少两项。要点:openssl s_client(协议/证书/套件)、curl -v(链完整性与跳转)。

延伸阅读

《Bulletproof SSL and TLS》(Ivan Ristić):从协议到运维的完整工程参考。