术语表

TLS 1.2 (传输层安全协议 1.2)

最后核实

定义

TLS 1.2 是 2008 年由 RFC 5246 定义的 TLS 版本,引入了基于 SHA-256 的密钥派生和 AES-GCM 等 AEAD 加密算法,至今仍被广泛使用。

TLS 1.2 是 TLS 的第三个版本,2008 年由 RFC 5246 定义。它把固定的 MD5/SHA-1 伪随机函数换成由密码套件指定哈希(通常是 SHA-256)的版本,新增 signature_algorithms 扩展让双方协商签名和哈希算法,并支持 AES-GCM 等 AEAD 密码套件。完整握手需要两个往返才能开始传输应用数据。

为什么重要

TLS 1.2 和 TLS 1.3 是当前浏览器仅接受的两个版本,而且很多客户端仍然离不开它:较老的 Android 和 Java 版本、各类嵌入式设备、部分支付和工控终端都可能不支持 TLS 1.3。与 TLS 1.3 不同,TLS 1.2 的安全性高度依赖配置:同一个协议既能协商出 ECDHE + AES-GCM 这样的强套件,也能协商出 RSA 密钥传输 + CBC、没有前向保密的弱套件。

例子

只保留具备前向保密的 AEAD 套件(均为真实 OpenSSL 名称):

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

在基于 OpenSSL 的服务器里,ssl_ciphers 只管 TLS 1.2 及以下,TLS 1.3 的套件要单独配置。宝塔面板或网上抄来的配置常常带着 3DES、CBC 套件,值得逐个核对。

常见误区

  • TLS 1.2 已经过时,应该关掉。 它并未被废弃,配合 ECDHE 和 AEAD 套件依然安全;贸然关闭会让不支持 TLS 1.3 的客户端无法访问。
  • 开了 TLS 1.2 就够了。 密码套件列表同样关键,不主动删除的话,RSA 密钥交换、CBC-SHA1、3DES 套件在 TLS 1.2 下仍可能被协商出来。
  • TLS 1.2 很慢。 完整握手确实多一个往返,但会话恢复和连接复用能抵消大部分开销。

延伸阅读