传输层安全
使用传输层安全 (TLS) 的任何连接的安全都严重依赖于所选的密码套件和安全参数。本文旨在帮助您做出这些决策,以确保客户端和服务器之间通信的机密性和完整性。Mozilla 操作安全 (OpSec) 团队维护了一个维基条目,其中包含服务器的参考配置。
传输层安全 (TLS) 协议是使两个联网应用程序或设备能够私密且稳健地交换信息的标准。使用 TLS 的应用程序可以选择其安全参数,这些参数会对数据的安全性和可靠性产生重大影响。本文概述了 TLS 以及在保护内容时需要做出的各种决策。
历史
引入 HTTPS 时,它是基于安全套接字层 (SSL) 2.0 的,该技术由 Netscape 引入。不久之后,它更新到 SSL 3.0,并且随着其使用范围的扩大,很明显需要指定一种通用且标准的加密技术,以确保所有 Web 浏览器和服务器之间的互操作性。 互联网工程任务组 (IETF) 在 1999 年 1 月的RFC 2246 中指定了 TLS 1.0。当前版本的 TLS 是 1.3 (RFC 8446)。
尽管 Web 现在使用 TLS 进行加密,但许多人出于习惯仍然将其称为“SSL”。
虽然 TLS 可以用于任何低级传输协议之上,但该协议的最初目标是加密 HTTP 流量。使用 TLS 加密的 HTTP 通常称为HTTPS。根据约定,TLS 加密的 Web 流量默认情况下通过端口 443 交换,而未加密的 HTTP 默认情况下使用端口 80。HTTPS 仍然是 TLS 的一个重要用例。
基于 TLS 的 HTTP
密码套件
配置服务器
正确配置服务器至关重要。通常,您应尝试将密码支持限制为尽可能新的密码,这些密码与您希望能够连接到您的站点的浏览器兼容。 Mozilla OpSec 的 TLS 配置指南提供了有关推荐配置的更多信息。
为了帮助您配置站点,Mozilla 提供了一个有用的TLS 配置生成器,该生成器将为以下 Web 服务器生成配置文件
- Apache
- Nginx
- Lighttpd
- HAProxy
- Amazon Web Services CloudFormation 弹性负载均衡器
使用配置器是创建满足您需求的配置的推荐方法;然后将其复制粘贴到服务器上的相应文件中,并重新启动服务器以获取更改。配置文件可能需要进行一些调整以包含自定义设置,因此请务必在使用前查看生成的配置;安装配置文件而不确保对域名等的任何引用都是正确的将导致服务器无法正常工作。
TLS 1.3
RFC 8446:TLS 1.3 是对 TLS 的重大修订。TLS 1.3 包含许多改进安全性和性能的更改。TLS 1.3 的目标是
- 删除 TLS 1.2 中未使用的和不安全的功能。
- 在设计中包含强大的安全分析。
- 通过加密更多协议来提高隐私。
- 减少完成握手所需的时间。
TLS 1.3 更改了大部分协议基础知识,但保留了以前 TLS 版本几乎所有基本功能。对于 Web,可以启用 TLS 1.3 而不影响兼容性,一些罕见的例外情况除外(见下文)。
TLS 1.3 中的主要更改是
- 在大多数情况下,TLS 1.3 握手在一个往返行程中完成,从而减少了握手延迟。
- 服务器可以启用 0-RTT(零往返时间)握手。重新连接到服务器的客户端可以立即发送请求,从而完全消除 TLS 握手的延迟。尽管 0-RTT 带来的性能提升可能非常显著,但它也存在一些重放攻击风险,因此在启用此功能之前需要谨慎。
- TLS 1.3 仅支持前向安全模式,除非连接已恢复或使用预共享密钥。
- TLS 1.3 定义了一组新的密码套件,这些套件专用于 TLS 1.3。这些密码套件都使用现代带关联数据的认证加密 (AEAD) 算法。
- TLS 1.3 握手已加密,除了建立共享密钥所需的那些消息。特别是,这意味着服务器和客户端证书已加密。但是请注意,客户端发送到服务器的服务器标识(服务器名称或 SNI 扩展)未加密。
- 许多机制已被禁用:重新协商、通用数据压缩、数字签名算法 (DSA) 证书、静态 RSA 密钥交换以及使用自定义 Diffie-Hellman (DH) 组的密钥交换。
TLS 1.3 草案版本的实现可用。TLS 1.3 在一些浏览器中启用,包括 0-RTT 模式。启用 TLS 1.3 的 Web 服务器可能需要调整配置才能使 TLS 1.3 成功运行。
TLS 1.3 只增加了一个重要的新的用例。0-RTT 握手可以为对延迟敏感的应用程序(如 Web)提供显着的性能提升。启用 0-RTT 需要额外的步骤,以确保成功部署并管理重放攻击的风险。
TLS 1.3 中删除重新协商可能会影响一些依赖于使用证书的客户端身份验证的 Web 服务器。一些 Web 服务器使用重新协商来确保客户端证书已加密,或者仅在请求某些资源时请求客户端证书。为了保护客户端证书的隐私,TLS 1.3 握手的加密确保客户端证书已加密;但是,这可能需要一些软件更改。TLS 1.3 支持反应式客户端证书身份验证,但尚未广泛实施。正在开发替代机制,这些机制也将支持 HTTP/2。
淘汰旧版 TLS
为了帮助构建更现代、更安全的 Web,所有主要浏览器都从 2020 年初开始删除对 TLS 1.0 和 1.1 的支持。您需要确保您的 Web 服务器支持 TLS 1.2 或 1.3。
从 Firefox 74 版本开始,当连接使用旧版 TLS 版本的服务器时,Firefox 会返回 安全连接失败 错误 (Firefox bug 1606734)。
TLS 握手超时值
如果 TLS 握手由于某种原因开始变得缓慢或无响应,则用户的体验可能会受到严重影响。为了缓解此问题,现代浏览器已实现握手超时。
- 从 58 版本开始,Firefox 实施了 TLS 握手超时,默认值为 30 秒。可以通过编辑 about:config 中的
network.http.tls-handshake-timeout
首选项来更改超时值。
另请参阅
- Mozilla SSL 配置生成器 和 Cipherlist.eu 可以帮助您为您的服务器生成配置以保护您的网站安全。
- Mozilla 操作安全 (OpSec) 团队维护了一个包含 参考 TLS 配置 的维基页面。
- 使用 HTTP Observatory 和 SSL Labs 测试网站的 HTTP/TLS 配置的安全性。
- 安全上下文
- Strict-Transport-Security HTTP 头