21.2. crypto-policies、RHEL 内核加密组件和协议
弃用了 SHA-1
在 RHEL 9 中,使用 SHA-1 签名在 DEFAULT 系统范围的加密策略中受到限制。除了 HMAC 外,TLS、DTLS、SSH、IKEv2、DNSSEC 和 Kerberos 协议中不再允许使用 SHA-1。没有由 RHEL 系统范围的加密策略控制的单个应用程序也在 RHEL 9 中使用 SHA-1 哈希。
如果您的场景需要使用 SHA-1 来验证现有或第三方加密签名,您可以输入以下命令启用它:
update-crypto-policies --set DEFAULT:SHA1
# update-crypto-policies --set DEFAULT:SHA1
或者,您可以将系统范围的加密策略切换到 LEGACY
策略。请注意,LEGACY
也启用了很多不安全的其他算法。如需更多信息,请参阅 RHEL 9 安全强化 文档中的 重新启用 SHA-1 部分。
有关仍需要 SHA-1 的系统的兼容性问题的解决方案,请参阅以下红帽知识库解决方案:
在所有策略级别禁用算法
以下算法在 RHEL 9 提供的 LEGACY
、DEFAULT
和 FUTURE
加密策略中被禁用:
- 早于版本 1.2 的 TLS (自 RHEL 9 开始,在 RHEL 8 中为 < 1.0)
- 早于 版本 1.2 的 DTLS (自 RHEL 9 开始,在 RHEL 8 中为 < 1.0)
- DH 的参数 < 2048 位(自 RHEL 9 开始,在 RHEL 8 中是 < 1024 位)
- RSA 的密钥大小 < 2048 位(自 RHEL 9 开始,在 RHEL 8 中是 < 1024 位)
- DSA(自 RHEL 9 开始,在 RHEL 8 中是 < 1024 位)
- 3DES(自 RHEL 9 开始)
- RC4(自 RHEL 9 开始)
- FFDHE-1024 (自 RHEL 9 开始)
- RbacConfig-DSS(自 RHEL 9 开始)
- Camellia(自 RHEL 9 开始)
- ARIA
- SEED
- IDEA
- 仅完整性密码套件
- 使用 SHA-384 HMAC 的 TLS CBC 模式密码组合
- AES-CCM8
- 所有 ECC curves 与 TLS 1.3 不兼容,包括 secp256k1
- IKEv1(自 RHEL 8 开始)
- BIND 配置中的 NSEC3DSA(自 RHEL 9.2 开始)
如果您的场景需要禁用的策略,您可以通过应用自定义加密策略或明确配置单个应用程序来启用它,但不支持生成的配置。
对 TLS 的更改
在 RHEL 9 中,TLS 配置是使用系统范围的加密策略机制执行的。不再支持 1.2 以下的 TLS 版本。DEFAULT
、FUTURE
和 LEGACY
加密策略只允许 TLS 1.2 和 1.3。如需更多信息,请参阅 使用系统范围的加密策略。
RHEL 9 中包含的库所提供的默认设置对于大多数部署来说已经足够安全了。TLS 实现尽可能使用安全算法,而不阻止来自或到旧客户端或服务器的连接。在具有严格安全要求的环境中应用强化设置,在这些环境中,不支持安全算法或协议的旧客户端或服务器不应连接或不允许连接。
现在,在启用了 FIPS 的系统上强制 Extended Master Secret
TLS 扩展
随着 RHSA-2023:3722 公告的发布,在启用了 FIPS 的 RHEL 9 系统上,对 TLS 1.2 连接强制Extended Master Secret
(EMS)扩展 (RFC 7627) 。这符合 FIPS-140-3 要求。TLS 1.3 不受影响。
不支持 EMS 或 TLS 1.3 的旧客户端现在无法连接到运行在 RHEL 9 上的 FIPS 服务器。同样,FIPS 模式下的 RHEL 9 客户端无法连接到只支持没有 EMS 的 TLS 1.2 服务器。在实践中意味着这些客户端无法连接到 RHEL 6、RHEL 7 和非 RHEL 传统操作系统上的服务器。这是因为传统的 OpenSSL 1.0.x 版本不支持 EMS 或 TLS 1.3。
RHEL 9 不支持 SCP
安全复制协议(SCP)协议不再被支持,因为它很难安全。它已经造成了安全问题,如 CVE-2020-15778。在 RHEL 9 中,SCP 默认由 SSH 文件传输协议(SFTP)替代。
默认情况下,SSH 无法从 RHEL 9 系统连接到旧的系统(例如,RHEL 6)或从旧的系统连接到 RHEL 9。这是因为旧版本中使用的加密算法现在被视为不安全。如果您的用例需要连接到旧的系统,您可以使用 ECDSA 和 ECDH 算法作为旧系统上的密钥,或者在 RHEL 9 系统中使用旧的加密策略。如需了解更多详细信息,请参阅 从 RHEL 9 SSH 到 RHEL 6 系统不能工作 和 与不支持 server-sigalgs 扩展 的 SSH 服务器和客户端的连接失败。
OpenSSH 服务器现在使用 /etc/ssh/sshd_config.d/
,而不是 /etc/sysconfig/sshd
中的 CRYPTO_POLICY=
行
在 RHEL 9 中,如果要使您的 SSH 服务器不选择系统范围的加密策略,则您必须使用新的 /etc/ssh/sshd_config.d/
置入目录。现在,在 RHEL 8 中用来指定允许的加密算法和密码的 /etc/sysconfig/sshd
配置文件中的 CRYPTO_POLICY=
指令被忽略。如需更多信息,请参阅安全强化文档中的 不选择系统范围加密策略的示例 部分,以及 在 RHEL 9 上,sshd 忽略密码、MAC 和 /etc/ssh/sshd_config 中的 KexAlgorithms 解决方案。
FIPS:OSPP
主机的互操作性由于 CNSA 1.0 而受到影响
OSPP
子策略已与 Commercial National Security Algorithm (CNSA) 1.0 一致。这在以下主要方面影响了使用 FIPS:OSPP
策略-子策略组合的主机的互操作性:
- 最小 RSA 密钥大小被强制为 3072 位。
- 算法协商不再支持 AES-128 密码、secp256r1 椭圆曲线和 FFDHE-2048 组。
默认禁用 OpenSSH root 密码登录
RHEL 9 中 OpenSSH 的默认配置不允许用户以 root
身份使用密码登录,以防止攻击者获得对密码的暴力攻击。
OpenSSH 进一步强制实施 SHA-2
出于加密目的,作为从不太安全的 SHA-1 消息摘要中进一步迁移努力的一部分,OpenSSH 中进行了以下更改:
-
对
sshd
启动添加了一个检查,检查是否在系统上配置了使用 SHA-1。如果不可用,OpenSSH 不会尝试对操作使用 SHA-1。这可消除在存在 DSS 密钥时加载它们,并在rsa-sha2
组合可用时强制发布这些组合。 - 在 SSH 私钥转换中,OpenSSH 明确使用 SHA-2 测试 RSA 密钥。
-
当 SHA-1 签名在服务器端不可用时,
sshd
使用 SHA-2 来确认主机密钥证明。这可能与 RHEL 8 及更早版本上的客户端不兼容。 - 当客户端上 SHA-1 算法不可用时,OpenSSH 使用 SHA-2。
- 在客户端上,当 SHA-1 在密钥证明请求中使用或未指定哈希算法(假设默认)时,OpenSSH 允许来自服务器的基于 SHA2 的密钥证明。这与 RSA 证书已存在的异常一致,并允许在支持时使用现代算法进行连接。
在 FIPS 模式下,GnuTLS 需要带有 TLS 1.2 的 EMS
为了遵守 FIPS-140-3 标准,对于在 FIPS 模式下协商的所有 TLS 1.2 连接,GnuTLS 服务器和客户端需要 Extended Master Secret (EMS)扩展(RFC 7627)。如果您的场景需要保持与不支持 EMS 且无法使用 TLS 1.3 的旧服务器和客户端的兼容性,您可以应用 NO-ENFORCE-EMS
系统范围的加密策略:
update-crypto-policies --set FIPS:NO-ENFORCE-EMS
# update-crypto-policies --set FIPS:NO-ENFORCE-EMS
如果您允许没有 EMS 的 TLS 1.2 连接,则您的系统将不再满足 FIPS-140-3 要求。
gnutls 不再支持 TPM 1.2
GnuTLS 库不再支持受信任的平台模块(TPM)1.2 技术。通过 GnuTLS API 使用 TPM 的应用程序必须支持 TPM 2.0。
gnutls 对 GOST 的支持已被删除
在 RHEL 8 中,通过系统范围的加密策略禁用了 GOST 密码。在 RHEL 9 中,GnuTLS 库中删除了对这些加密机制的支持。
cyrus-sasl
现在使用 GDBM 而不是 Berkeley DB
cyrus-sasl
软件包构建时没有 libdb
依赖项,sasldb
插件使用 GDBM 数据库格式而不是 Berkeley DB。要迁移以旧 Berkeley DB 格式存储的现有简单身份验证和安全层(SASL)数据库,请使用 cyrusbdb2current
工具,语法如下:
cyrusbdb2current <sasldb_path> <new_path>
$ cyrusbdb2current <sasldb_path> <new_path>
NSS 现在在 FIPS 模式下强制实施 EMS
网络安全服务(NSS)库现在包含 TLS-REQUIRE-EMS
策略,来要求所有 TLS 1.2 连接的 Extended Master Secret (EMS)扩展(RFC 7627),如 FIPS 140-3 标准强制的那样。当系统范围的加密策略被设置为 FIPS
时,NSS 使用新策略。
如果您的场景需要与不支持 EMS 或 TLS 1.3 的旧系统进行交互,您可以应用 NO-ENFORCE-EMS
系统范围的加密策略。此更改违反了 FIPS-140-3 要求。
NSS 不再支持 DBM 和 pk12util
默认值更改
网络安全服务(NSS)库不再支持对信任数据库的 DBM 文件格式。在 RHEL 8 中,SQLite 文件格式是默认格式,现有的 DBM 数据库以只读模式打开,并自动转换为 SQLite。升级到 RHEL 9 之前,请将所有信任数据库从 DBM 更新到 SQLite。
具体说明请查看 将 NSS 数据库从 DBM 更新到 SQLite 流程。
NSS pk12util
默认不再使用 DES-3 和 SHA-1
pk12util
工具现在在导出私钥时默认使用 AES 和 SHA-256 算法而不是 DES-3 和 SHA-1。
请注意,RHEL 9 中所有签名的默认系统范围的加密策略禁用了 SHA-1。
NSS 不再支持少于 1023 位的 RSA 密钥
网络安全服务(NSS)库的更新将所有 RSA 操作的最小密钥大小从 128 位改为 1023 位。这意味着 NSS 不再执行以下功能:
- 生成大于 1023 位的 RSA 密钥。
- 使用 RSA 密钥签名或验证 RSA 签名少于 1023 位。
- 使用 RSA 密钥加密或解密值少于 1023 位。
FIPS 模式不支持 openssl ENGINE 扩展 API
传统的适用于 OpenSSL 的扩展系统(ENGINE API)与新供应商 API 不兼容。因此,依赖于 OpenSSL 引擎提供功能的应用程序,如 openssl-pkcs11
和 openssl-ibmca
模块无法在 FIPS 模式中使用。
OpenSSL 中的 FIPS 模式必须启用才能正常工作
如果您在启用了 FIPS 模式的 openssl.cnf
配置文件中使用非默认值,特别是在使用第三方 FIPS 提供商时,请将 fips=yes
添加到 openssl.cnf
文件中。
OpenSSL 在 FIPS 模式下不接受显式 curve 参数
指定显式 curve 参数的 Elliptic curve 加密参数、私钥、公钥和证书不能在 FIPS 模式下继续工作。使用 ASN.1 对象标识符(其使用 FIPS 批准的 curve 之一)指定 curve 参数,仍可在 FIPS 模式下继续工作。
Openssl 不再创建 X.509 v1 证书
在 RHEL 9.5 中引入 OpenSSL TLS 工具包 3.2.1 后,您无法再使用 openssl
CA 工具创建 X.509 版本 1 格式的证书。X.509 v1 格式不满足当前的 Web 要求。
OpenSSL 密码套件不再启用带有禁用哈希或 MAC 的密码套件
在以前的版本中,应用自定义加密策略可能会启用特定的 TLS 1.3 密码套件,即使其哈希或 MAC 被禁用,因为 OpenSSL TLS 1.3 特定的 Ciphersuites
选项值仅由加密策略的 cipher 选项控制。在这个版本中,在决定是否启用密码套件时,
crypto-policies
会考虑更多的算法。因此,在带有自定义加密策略的系统中 OpenSSL 可能会拒绝根据系统配置更好地协商一些之前启用的 TLS 1.3 密码套件。
libreswan 现在默认请求 ESN
在 Libreswan 中,配置选项 esn=
的默认值已从 no
改为 either
。这意味着,在启动连接时,Libreswan 会默认请求使用扩展序列号(ESN)。特别是,当使用硬件卸载时,这个新行为会防止某些网络接口卡(NIC)在不支持 ESN 时建立 IPsec 连接。要禁用 ESN,将 esn=
设为 no
,将 replay_window=
选项设为 32 或更小的值。例如:
esn=no replay_window=32
esn=no
replay_window=32
replay_window=
选项是必需的,因为不同的机制使用 ESN 进行窗口大小大于 32 的反重放保护。
RHEL 中的加密 DNS 作为技术预览提供
在 RHEL 9.6 中,您可以启用加密的 DNS 来保护使用 DNS-over-TLS (DoT)的 DNS 通信。加密 DNS (eDNS)加密所有 DNS 流量端到端,且不回退到不安全的协议,并与 Zero Trust Architecture (ZTA)原则一致。
要使用 eDNS 执行新安装,请使用内核命令行指定启用了 DoT 的 DNS 服务器。这样可确保加密 DNS 在安装过程中、引导时间和安装的系统中处于活跃状态。如果您需要自定义 CA 证书捆绑包,则只能使用 Kickstart 文件中的 %certificate
部分安装它。目前,自定义 CA 捆绑包只能通过 Kickstart 安装安装。
在现有系统上,将 NetworkManager 配置为使用新的 DNS 插件 dnsconfd
,后者为 eDNS 管理本地 DNS 解析器(unbound)。添加内核参数来为早期引导过程配置 eDNS,并选择性地安装自定义 CA 捆绑包。
另外,身份管理(IdM)部署也可以使用加密的 DNS 服务器,以及支持 DNS-over-TLS (DoT)的集成 DNS 服务器。