对于网站而言,如何选择 TLS 协议版本

作者:小芸

更新于:2025年7月6日 22:32

对于网站而言,如何选择 TLS 协议版本

TLS 协议有多个版本,包括 TLS 1.0、TLS 1.1、TLS 1.2 和 TLS 1.3,TLS 1.3是最新的版本,提供了更安全、更高效的加密机制。旧版的 TLS 1.0 与 TLS 1.1 存在安全隐患,而最新的 TLS 协议版本在旧版浏览器或设备上可能不兼容,应该如何选择?

概述

传输层安全性 (TLS) 是最常见的互联网协议,用于在客户端和服务器之间建立加密的通信通道。

对于网站而言,TLS(传输层安全)有以下几个重要作用:

  1. 保护数据隐私:TLS 通过加密网站和用户之间的通信,确保敏感信息(例如登录凭据、支付信息等)在传输过程中不会被第三方窃取或窥视。这对于保护用户隐私非常重要,特别是在进行在线支付、填写个人信息等操作时。
  2. 建立信任:通过使用 TLS,网站可以通过数字证书证明其身份的真实性,这有助于建立用户对网站的信任。当用户访问一个使用 TLS 加密的网站时,浏览器会显示一个锁定图标或绿色地址栏,表明连接是安全的,从而增加了用户的信心。
  3. 防止数据篡改:TLS 使用消息认证码(MAC)来确保数据在传输过程中没有被篡改。这意味着即使数据被截获,也很难修改其中的内容,保护了网站与用户之间的数据完整性。
  4. 符合法规要求:许多国家和地区的法规要求网站在处理用户敏感信息时采取适当的安全措施,其中包括使用 TLS 加密传输数据。因此,使用 TLS 可以帮助网站遵守相关的法律法规,避免因未能保护用户数据而引发的法律责任和信任危机。

使用 TLS 协议也是启用 HTTPS 的必要条件之一。

TLS 1.0 与 TLS 1.1 存在安全隐患

 TLS 1.0 的历史可以追溯到 1999 年,随着时间的推移,人们在该协议版本中发现了一些安全漏洞。 TLS 1.1 于 2006 年发布,并进行了一些安全改进,但从未得到广泛采用。这些版本早已被 TLS 1.2 和 TLS 1.3 超越,并且 TLS 实现尝试使用可用的最高协议版本来协商连接。

在过去的几年中,由于各种安全问题,互联网标准和监管机构已弃用或不允许 TLS 版本 1.0 和 1.1。

2023 年 9 月微软宣布从 Windows 11 Insider Preview 版本以及未来的 Windows 操作系统版本开始,TLS 1.0 和 1.1 版本很快将在操作系统中默认禁用。

Android 10 及更高版本中,默认情况下为所有 TLS 连接启用 TLS 1.3。

自 iOS 15、iPadOS 15、macOS 12、watchOS 8 和 tvOS 15起,已经弃用了TLS 1.0 和 1.1,并且在未来的版本中将不再提供支持。

网站应该采取什么措施

对于启用了 HTTPS 的网站而言,现如今也应该果断弃用不安全的 TLS 1.0 与 TLS 1.1 ,改为仅启用 TLS 1.2 和 TLS 1.3 。

TLS 1.2 诞生于 2008 年,一般只有在此之前诞生的浏览器版本与设备不支持它。哪怕是已经被微软淘汰掉的 Internet Explorer 浏览器也从 v8 或更高版本开始支持 TLS 1.2 。所以兼容性问题几乎不用担心。

如果 WEB 服务器仅启用 TLS 1.2 和 TLS 1.3 ,这意味着一些旧的 OpenSSL 密码套件无需再使用,以提高效率和安全性。

  • ECDHE-RSA-AES256-SHA
  • ECDHE-RSA-AES128-SHA
  • AES256-GCM-SHA384
  • AES128-GCM-SHA256
  • AES256-SHA256
  • AES128-SHA256
  • AES256-SHA
  • AES128-SHA

因 TLS 1.3 仅支持 Firefox 63+、Android 10.0+、Chrome 70+、Edge 75、Java 11、OpenSSL 1.1.1、Opera 57 和 Safari 12.1。因此,建议在 Web 服务器中同时启用 1.2 和 1.3 的支持,以获得最大兼容性。

配置 TLS 1.2 和 TLS 1.3 示例

首先通过以下指令确认服务器中的 openssl 版本大于或等于 1.1.1:

openssl version

Nginx 配置实例:

server {
	listen 443 ssl http2;
	listen [::]:443 ssl http2;
	ssl_certificate /path/to/signed_cert_plus_intermediates;
	ssl_certificate_key /path/to/private_key;
	ssl_session_timeout 1d;
	ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
	ssl_session_tickets off;
	# TLS 1.2 和 TLS 1.3 最大兼容性的配置
	ssl_protocols TLSv1.2 TLSv1.3;
	ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
	ssl_prefer_server_ciphers off;
}

注意要替换 ssl_certificate 和 ssl_certificate_key 的证书与密钥文件路径。

测试与验证

测试 TLS 1.0 支持情况:

curl -I -v --tlsv1 --tls-max 1.0 https://yousite.com

测试 TLS 1.1 支持情况:

curl -I -v --tlsv1 --tls-max 1.1 https://yousite.com

如果返回信息中有相关错误提示,说明 TLS 1.0 与 TLS 1.1 已经不再支持。

不支持 TLSv1.0 的返回示例:

* TLSv1.0 (OUT), TLS handshake, Client hello (1):
* TLSv1.0 (IN), TLS alert, protocol version (582):
* error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
* Closing connection 0
curl: (35) error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version

© 版权声明

本文由站长帮(zhanzhangb.cn)发布,保留所有权利。

未经明确书面许可,不得转载、摘编本站内容。对于侵权行为,我们将保留追究法律责任的权利。