23.2. 计划并使用 TLS
TLS(传输层安全)是用来保护网络通信的加密协议。在通过配置首选密钥交换协议、身份验证方法和加密算法来强化系统安全设置时,需要记住支持的客户端的范围越广,产生的安全性就越低。相反,严格的安全设置会导致与客户端的兼容性受限,这可能导致某些用户被锁定在系统之外。请确保以最严格的可用配置为目标,并且仅在出于兼容性原因需要时才放宽配置。
23.2.1. SSL 和 TLS 协议
安全套接字层(SSL)协议最初使由 Netscape 公司开发的,以提供一种在互联网上进行安全通信的机制。因此,该协议被互联网工程任务组(IETF)采纳,并重命名为传输层安全(TLS)。
TLS 协议位于应用协议层和可靠的传输层之间,例如 TCP/IP。它独立于应用程序协议,因此可在很多不同的协议下分层,例如:HTTP、FTP、SMTP 等。
协议版本 | 用法建议 |
---|---|
SSL v2 | 不要使用。具有严重的安全漏洞。从 RHEL 7 开始从核心加密库中删除了。 |
SSL v3 | 不要使用。具有严重的安全漏洞。从 RHEL 8 开始从核心加密库中删除了。 |
TLS 1.0 |
不建议使用。已知的无法以保证互操作性方式缓解的问题,且不支持现代密码套件。在 RHEL 8 中,只在 |
TLS 1.1 |
在需要时用于互操作性.不支持现代加密套件。在 RHEL 8 中,只在 |
TLS 1.2 | 支持现代 AEAD 密码组合。此版本在所有系统范围的加密策略中启用,但此协议的可选部分包含漏洞,TLS 1.2 也允许过时的算法。 |
TLS 1.3 | 推荐的版本。TLS 1.3 删除了已知有问题的选项,通过加密更多协商握手来提供额外的隐私,由于使用了更有效的现代加密算法,所以可以更快。TLS 1.3 也在所有系统范围的加密策略中启用了。 |
23.2.2. RHEL 8 中 TLS 的安全注意事项
在 RHEL 8 中,由于系统范围的加密策略,与加密相关的注意事项大大简化了。DEFAULT
加密策略只允许 TLS 1.2 和 1.3。要允许您的系统使用早期版本的 TLS 来协商连接,您需要选择不使用应用程序中的以下加密策略,或使用 update-crypto-policies
命令切换到 LEGACY
策略。如需更多信息,请参阅使用系统范围的加密策略。
RHEL 8 中包含的库提供的默认设置足以满足大多数部署的需要。TLS 实现尽可能使用安全算法,而不阻止来自或到旧客户端或服务器的连接。在具有严格安全要求的环境中应用强化设置,在这些环境中,不支持安全算法或协议的旧客户端或服务器不应连接或不允许连接。
强化 TLS 配置的最简单方法是使用 update-crypto-policies --set FUTURE
命令将系统范围的加密策略级别切换到 FUTURE
。
为 LEGACY
加密策略禁用的算法不符合红帽的 RHEL 8 安全愿景,其安全属性不可靠。考虑放弃使用这些算法,而不是重新启用它们。如果您确实决定重新启用它们(例如,为了与旧硬件的互操作性),请将它们视为不安全的,并应用额外的保护措施,例如将其网络交互隔离到单独的网络段。不要在公共网络中使用它们。
如果您决定不遵循 RHEL 系统范围的加密策略,或根据您的设置创建自定义的加密策略,请在自定义配置中对首选协议、密码套件和密钥长度使用以下建议:
23.2.2.1. 协议
TLS 的最新版本提供了最佳安全机制。除非有充分的理由包含对旧版本的 TLS 的支持,否则请允许您的系统使用至少 TLS 版本 1.2 来协商连接。
请注意,尽管 RHEL 8 支持 TLS 版本 1.3,但 RHEL 8 组件并不完全支持这个协议的所有功能。例如,Apache Web 服务器尚不完全支持可降低连接延迟的 0-RTT(Zero R Trip Time)功能。
23.2.2.2. 密码套件
现代、更安全的密码套件应该优先于旧的不安全密码套件。一直禁止 eNULL 和 aNULL 密码套件的使用,它们根本不提供任何加密或身份验证。如果有可能,基于 RC4 或 HMAC-MD5 的密码套件也必须被禁用。这同样适用于所谓的出口密码套件,它们被有意地弱化了,因此很容易被破解。
虽然不会立即变得不安全,但提供安全性少于 128 位的密码套件在它们的短使用期中不应该被考虑。使用 128 位或者更高安全性的算法可以预期在至少数年内不会被破坏,因此我们强烈推荐您使用此算法。请注意,虽然 3DES 密码公告使用 168 位但它们实际只提供了 112 位的安全性。
始终优先使用支持(完美)转发保密(PFS)的密码套件,这样可确保加密数据的机密性,以防服务器密钥被泄露。此规则排除了快速 RSA 密钥交换,但允许使用 ECDHE 和 DHE。在两者中,ECDHE 更快,因此是首选。
您还应该优先选择 AEAD 密码,如 AES-GCM,使用 CBC 模式密码,因为它们不容易受到 padding oracle 攻击的影响。此外,在很多情况下,在 CBC 模式下,AES-GCM 比 AES 快,特别是当硬件具有 AES 加密加速器时。
另请注意,在使用带有 ECDSA 证书的 ECDHE 密钥交换时,事务的速度甚至比纯 RSA 密钥交换要快。为了给旧客户端提供支持,您可以在服务器上安装两对证书和密钥:一对带有 ECDSA 密钥(用于新客户端),另一对带有 RSA 密钥(用于旧密钥)。
23.2.2.3. 公钥长度
在使用 RSA 密钥时,总是首选使用至少由 SHA-256 签名的 3072 位的密钥长度,对于真实的 128 位安全性来说,这个值已经足够大。
您的系统安全性仅与链中最弱的连接相同。例如,只是一个强大的密码不能保证良好安全性。密钥和证书以及认证机构(CA)用来签署您的密钥的哈希功能和密钥同样重要。
其他资源
- RHEL 8 中的系统范围的加密策略
-
您系统上的
update-crypto-policies (8)
手册页
23.2.3. 在应用程序中强化 TLS 配置
在 RHEL 中,系统范围的加密策略 提供了一种便捷的方法,来确保您的使用加密库的应用程序不允许已知的不安全协议、密码或算法。
如果要使用自定义加密设置来强化与 TLS 相关的配置,您可以使用本节中描述的加密配置选项,并以最少的需求量覆盖系统范围的加密策略。
无论您选择使用什么配置,请始终确保您的服务器应用程序强制实施 服务器端密码顺序,以便使用的密码套件由您配置的顺序来决定。
23.2.3.1. 将 Apache HTTP 服务器配置为使用 TLS
Apache HTTP 服务器
可以使用 OpenSSL
和 NSS
库来满足其 TLS 的需求。RHEL 8 通过 eponymous 软件包提供 mod_ssl
功能:
# yum install mod_ssl
mod_ssl
软件包将安装 /etc/httpd/conf.d/ssl.conf
配置文件,该文件可用来修改 Apache HTTP 服务器
与 TLS 相关的设置。
安装 httpd-manual
软件包以获取 Apache HTTP 服务器
的完整文档,包括 TLS 配置。/etc/httpd/conf.d/ssl.conf
配置文件中的指令在 /usr/share/httpd/manual/mod_ssl.html
文件中详细介绍。/usr/share/httpd/manual/ssl/ssl/ssl_howto.html
文件中描述了各种设置的示例。
修改 /etc/httpd/conf.d/ssl.conf
配置文件中的设置时,请确保至少考虑以下三个指令:
SSLProtocol
- 使用这个指令指定您要允许的 TLS 或者 SSL 版本。
SSLCipherSuite
- 使用这个指令来指定您首选的密码套件或禁用您要禁止的密码套件。
SSLHonorCipherOrder
-
取消注释并将此指令设置为
on
,以确保连接的客户端遵循您指定的密码顺序。
例如,只使用 TLS 1.2 和 1.3 协议:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
如需更多信息,请参阅 部署不同类型的服务器 文档中的 在 Apache HTTP 服务器上配置 TLS 加密 一章。
23.2.3.2. 将 Nginx HTTP 和代理服务器配置为使用 TLS
要在 Nginx
中启用 TLS 1.3 支持,请将 TLSv1.3
值添加到 /etc/nginx/nginx.conf
配置文件的 server
部分的 ssl_protocols
选项:
server { listen 443 ssl http2; listen [::]:443 ssl http2; .... ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers .... }
如需更多信息,请参阅 部署不同类型的服务器 文档中的 向 Nginx web 服务器添加 TLS 加密 一章。
23.2.3.3. 将 Dovecot 邮件服务器配置为使用 TLS
要将 Dovecot
邮件服务器的安装配置为使用 TLS,请修改 /etc/dovecot/conf.d/10-ssl.conf
配置文件。您可以在 /usr/share/doc/dovecot/wiki/SSL.DovecotConfiguration.txt
文件中找到一些基本配置指令的说明,该文件与 Dovecot
的标准安装一起安装。
修改 /etc/dovecot/conf.d/10-ssl.conf
配置文件中的设置时,请确保至少考虑以下三个指令:
ssl_protocols
- 使用这个指令指定您要允许或者禁用的 TLS 或者 SSL 版本。
ssl_cipher_list
- 使用这个指令指定您首选的密码套件或禁用您要禁止的密码套件。
ssl_prefer_server_ciphers
-
取消注释并将此指令设置为
yes
,以确保连接的客户端遵循您指定的密码顺序。
例如,/etc/dovecot/conf.d/10-ssl.conf
中的以下行只允许 TLS 1.1 及之后的版本:
ssl_protocols = !SSLv2 !SSLv3 !TLSv1
其它资源
- 在 RHEL 8 上部署不同类型的服务器
-
config(5)
和ciphers(1)
手册页。 - 安全使用传输层安全性(TLS)和数据报传输层安全性(DTLS)的建议。
- Mozilla SSL 配置生成器。
- SSL 服务器测试 。