简述
系统范围的加密策略:一个用于配置核心加密子系统的系统组件,涵盖了 TLS、IPsec、SSH、DNSSec 以及 Kerberos 等协议。它提供了小部分的策略集,管理员可以选择这些策略。
RHEL 8 中系统范围的加密策略
设置系统范围的策略时,RHEL 中的应用程序都会默认遵守它并拒绝使用不符合该策略的算法和协议(相当于应用程序的全局默认行为),但您可以根据需要将应用程序的这些默认行为覆盖。
预定义的策略项如下表所示:
策略项 | 说明 |
---|---|
DEFAULT | 允许 TLS 1.2 和 1.3 协议;允许 IKEv2 和 SSH2 协议;如果 RSA 密钥和 Diffie-Hellman 参数的长度至少为2048位,则该策略项可以接受它们 |
LEGACY | 为了兼容 RHEL 6 以及更早版本的策略项,由于攻击面增加,因此其安全性较低。除了允许 DEFAULT 策略项外,还支持 TLS 1.0 以及 1.1;允许 DSA、3DES 和 RC4;如果 RSA 密钥和 Diffie-Hellman 参数长度至少为1023位,则该策略项可以接受它们 |
FUTURE | 更加严格的具有前瞻性的策略项,用于测试未来可能会实施的策略。不允许在签名算法中使用 SHA-1;允许 TLS 1.2 和 1.3 协议;允许 IKEv2 和 SSH2 协议;如果 RSA 密钥和 Diffie-Hellman 参数至少是 3072 位,则该策略项可以接受它们。如果您的系统在公共互联网上进行通信,您可能会遇到互操作性(interoperability )问题 |
FIPS | 为了符合 FIPS 140 要求而定义的策略项。需要注意!切换到该策略项并不能完全保证符合 FIPS 140 标准。当您将系统设置为 FIPS 模式后,还必须重新生成所有的加密密钥 |
注:虽然红帽预定义了这些策略项中所包含的特定算法,但只有在应用程序支持时才可用。
注: Federal Information Processing Standard (FIPS),中文翻译为「联邦信息处理标准」
# 查看当前系统范围的加密策略
Shell > update-crypto-policies --show
# 变更当前系统范围的加密策略,需要重启系统才能应用。
Shell > update-crypto-policies --set FUTURE
策略项与加密套件/协议的对照关系:
LEGACY | DEFAULT | FIPS | FUTURE | |
---|---|---|---|---|
IKEv1 | × | × | × | × |
3DES | √ | × | × | × |
RC4 | √ | × | × | × |
DH | 最少 1024 位 | 最少 2048 位 | 最少 2048 位 | 最少 3072 位 |
RSA | 最少 1024 位 | 最少 2048 位 | 最少 2048 位 | 最少 3072 位 |
DSA | √ | × | × | × |
TLS v1.0 | √ | × | × | × |
TLS v1.1 | √ | × | × | × |
数字签名中的 SHA-1 | √ | √ | × | × |
CBC 模式密码 | √ | √ | √ | × |
密钥长度小于 256 位的对称密码 | √ | √ | √ | × |
证书中的 SHA-1 和 SHA-224 签名 | √ | √ | √ | × |
-
切换到 LEGACY 策略项
Shell > update-crypto-policies --set LEGACY
请注意!这会增加操作系统以及应用程序的安全性风险。
-
切换到 FIPS 策略项(模式)
# 使用 fips-mode-setup 工具在内部应用 FIPS 策略项 Shell > fips-mode-setup --enable Shell > reboot # 检查 FIPS 模式的当前状态 Shell > fips-mode-setup --check FIPS mode is enabled.
-
将应用程序从系统范围的加密策略中排除
您可以直接在应用程序的配置文件(或命令行选项)中配置受支持的加密套件以及协议,以为您的应用程序使用自定义的加密设置。例如 wget:
Shell > wget --secure-protocol=TLSv1_1 --ciphers="SECURE128" https://example.com
也可以从 /etc/crypto-policies/back-ends/ 目录中删除与应用程序相关的软链接,接着使用您自定义的加密设置进行替换。
-
子策略
您可以在已有策略项的基础之上应用自定义的子策略。
/etc/crypto-policies/state/CURRENT.pol 文件内容列出了当前应用系统范围策略的所有设置。若要使您的加密策略更加的严格,请参阅 /usr/share/crypto-policies/policies/FUTURE.pol 文件内容中列出的值。
您可以在 /usr/share/crypto-policies/policies/modules/ 目录中找到示例的子策略(subpolicies)。
注:子策略的文件名需要使用大写字母并以
.pmod
结尾。以下是子策略的示例流程:
# 第一个子策略 Shell > cd /usr/share/crypto-policies/policies/modules/ && vim MYCRYPTO-1.pmod min_rsa_size = 3072 hash = SHA2-384 SHA2-512 SHA3-384 SHA3-512 # 第二个子策略 Shell > cd /usr/share/crypto-policies/policies/modules/ && vim SCOPES-AND-WILDCARDS.pmod # Disable the AES-128 cipher, all modes cipher = -AES-128-* # Disable CHACHA20-POLY1305 for the TLS protocol (OpenSSL, GnuTLS, NSS, and OpenJDK) cipher@TLS = -CHACHA20-POLY1305 # Allow using the FFDHE-1024 group with the SSH protocol (libssh and OpenSSH) group@SSH = FFDHE-1024+ # Disable all CBC mode ciphers for the SSH protocol (libssh and OpenSSH) cipher@SSH = -*-CBC # Allow the AES-256-CBC cipher in applications using libssh cipher@libssh = AES-256-CBC+ # 应用这些子策略 Shell > update-crypto-policies --set DEFAULT:MYCRYPTO-1:SCOPES-AND-WILDCARDS # 重启生效 Shell > reboot # 验证 Shell > grep rsa_size /etc/crypto-policies/state/CURRENT.pol
-
自定义系统范围的加密策略
一个完整的示例流程如下:
# 创建一个自定义的策略文件,要求文件名大写且以 .pol 结尾 ## 策略文件的内容请参考 /usr/share/crypto-policies/policies/DEFAULT.pol Shell > cd /etc/crypto-policies/policies/ && vim MYPOLICY.pol Shell > update-crypto-policies --set MYPOLICY Shell > reboot
RHEL 9 中系统范围的加密策略
策略项 | 说明 |
---|---|
DEFAULT | 允许 TLS 1.2 和 1.3 协议;允许 IKEv2 和 SSH2 协议;如果 RSA 密钥和 Diffie-Hellman 参数的长度至少为2048位,则该策略项可以接受它们 |
LEGACY | 为了兼容 RHEL 6 以及更早版本的策略项,由于攻击面增加,因此安全性较低。允许将 SHA-1 用作 TLS hash、签名和算法;允许将 CBC-mode 密码与 SSH 一起使用;使用 GnuTLS 的应用程序允许使用 SHA-1 签名的证书;允许 TLS 1.2 和1.3协议;允许 IKEv2 和 SSH2 协议;如果 RSA 密钥和 Diffie-Hellman 参数的长度至少为 2048 位,则该策略项可以接受它们 |
FUTURE | 更加严格的具有前瞻性的策略项,用于测试未来可能会实施的策略。不允许在 DNSSec 或 HMAC 中使用 SHA-1;SHA2-224 和 SHA3-224 哈希被拒绝;禁用 128 位密码;CBC-mode 密码被禁用(排除 Kerberos);允许 TLS 1.2 和1.3协议;允许 IKEv2 和 SSH2 协议;如果 RSA 密钥和 Diffie-Hellman 参数至少是 3072 位,则该策略项可以接受它们。如果您的系统在公共互联网上进行通信,您可能会遇到互操作性(interoperability )问题 |
FIPS | 为了符合 FIPS 140 要求而定义的策略项。需要注意!切换到该策略项并不能完全保证符合 FIPS 140 标准。当您将系统设置为 FIPS 模式后,还必须重新生成所有的加密密钥 |
# 查看当前系统范围的加密策略
Shell > update-crypto-policies --show
# 变更当前系统范围的加密策略,需要重启系统才能应用。
Shell > update-crypto-policies --set FUTURE
策略项与加密套件/协议的对照关系:
LEGACY | DEFAULT | FIPS | FUTURE | |
---|---|---|---|---|
IKEv1 | × | × | × | × |
3DES | × | × | × | × |
RC4 | × | × | × | × |
DH | 最少 2048 位 | 最少 2048 位 | 最少 2048 位 | 最少 3072 位 |
RSA | 最少 2048 位 | 最少 2048 位 | 最少 2048 位 | 最少 3072 位 |
DSA | × | × | × | × |
TLS v1.1 和更加早的版本 | × | × | × | × |
TLS v1.2 和更加新的版本 | √ | √ | √ | √ |
数字签名与证书中的 SHA-1 | √ | × | × | × |
CBC 模式密码 | √ | × | × | × |
密钥长度小于 256 位的对称密码 | √ | √ | √ | × |
-
切换到 LEGACY 策略项
同 RHEL 8 的操作
-
切换到 FIPS 策略项(模式)
同 RHEL 8 的操作
-
将应用程序从系统范围的加密策略中排除
同 RHEL 8 的操作
-
子策略
用法与定义同 RHEL 8 子策略
-
重新启用 SHA-1
在一些使用场景中,需要重新启用 SHA-1,在 RHEL 9 中默认就提供了它,即 /usr/share/crypto-policies/policies/modules/SHA1.pmod 文件。
Shell > update-crypto-policies --set DEFAULT:SHA1 && reboot Shell > update-crypto-policies --show DEFAULT:SHA1
不建议您直接将系统范围的加密策略变更为 LEGACY
-
自定义系统范围的加密策略
同 RHEL 8
