第 3 章 使用系统范围的加密策略

Crypto 策略是一个系统组件,它可配置核心加密子系统,覆盖 TLS、IPSec、SSH、DNSSEC 和 Kerberos 协议。它提供了一小套策略,管理员可以选择。

3.1. 全系统的加密政策

一旦设置了全系统的策略,RHEL中的应用程序就会遵循它,拒绝使用不符合策略的算法和协议,除非你明确要求应用程序这样做。也就是说,该策略适用于应用程序在使用系统提供的配置运行时的默认行为,但如果需要的话,你可以覆盖它。

Red Hat Enterprise Linux 8 包含以下策略级别。

默认值

默认的全系统加密策略级别为当前的威胁模型提供安全设置。它允许TLS 1.2和1.3协议,以及IKEv2和SSH2协议。如果RSA密钥和Diffie-Hellman参数至少有2048位长,则可以接受。

LEGACY

该策略确保了与Red Hat Enterprise Linux 5及更早版本的最大兼容性;由于增加了攻击面,安全性较差。除了DEFAULT级别的算法和协议外,它还包括对TLS 1.0和1.1协议的支持。允许使用DSA、3DES和RC4算法,而RSA密钥和Diffie-Hellman参数如果长度至少为1023位,则可以接受。

未来

保守的安全级别,相信可以抵御任何近期的未来攻击。这个级别不允许在签名算法中使用SHA-1。如果RSA密钥和Diffie-Hellman参数至少有3072位长,则可以接受。

FIPS

符合FIPS 140-2要求的政策级别。这是fips-mode-setup工具内部使用的,它将RHEL系统切换到FIPS模式。

红帽会不断调整所有的策略级别,以便除了使用LEGACY策略时,所有的库都能提供安全的默认值。尽管LEGACY配置文件没有提供安全的默认值,但它不包括任何容易被利用的算法。因此,任何提供的策略中的已启用算法集或可接受的密钥大小可能会在RHEL 8的生命周期内发生变化。

这种变化反映了新的安全标准和新的安全研究。如果您必须在RHEL 8的整个生命周期内确保与特定系统的互操作性,您应该选择退出与该系统交互的组件的加密政策。

重要

因为客户门户网站 API 中的证书使用的加密密钥不满足 FUTURE 系统范围的加密策略的要求,所以 redhat-support-tool 程序目前无法使用这个策略级别。

要临时解决这个问题,在连接到客户门户网站 API 时使用 DEFAULT 加密策略。

注意

策略级别中描述的允许使用的特定算法和密码只有在应用程序支持的情况下才能使用。

管理加密政策的工具

要查看或更改当前系统范围内的加密策略,请使用更新-加密策略工具,例如。

$ update-crypto-policies --show
DEFAULT
# update-crypto-policies --set FUTURE
Setting system policy to FUTURE

为了确保加密策略的改变被应用,重新启动系统。

通过删除不安全的密码套件和协议来实现强大的加密默认。

以下列表包含了从RHEL 8的核心加密库中删除的密码套件和协议。它们在源码中不存在,或者在构建过程中被禁止支持,因此应用程序无法使用它们。

  • DES(自RHEL 7起)
  • 所有出口级密码套件(自RHEL 7起)。
  • 签名中的MD5(自RHEL 7起)
  • SSLv2(自 RHEL 7 开始)
  • SSLv3(自 RHEL 8 开始)
  • 所有ECC曲线<224位(自RHEL 6起)。
  • 所有二进制字段ECC曲线(自RHEL 6起)。

在所有策略级别中禁用密码套件和协议。

在所有加密策略级别中,以下密码套件和协议被禁用。它们只能通过对单个应用程序的明确配置来启用。

  • 参数小于1024位的DH
  • 密钥大小小于1024位的RSA
  • Camellia
  • ARIA
  • SEED
  • IDEA
  • 纯完整性密码套件
  • 使用 SHA-384 HMAC 的 TLS CBC 模式密码组合
  • AES-CCM8
  • 所有 ECC curves 与 TLS 1.3 不兼容,包括 secp256k1
  • IKEv1(自 RHEL 8 开始)

在密码政策层面启用的密码套件和协议。

下表显示了所有四个密码政策级别中启用的密码套件和协议。

 LEGACY默认值FIPS未来

IKEv1

3DES

RC4

DH

最小值1024位

最小值2048位

最小值2048位

最少3072位3072位

RSA

最小值1024位

最小值2048位

最小值2048位

最少3072位3072位

DSA

TLS v1.0

TLS v1.1

数字签名中的SHA-1

CBC模式密码

密钥小于256位的对称密码器。

证书中的SHA-1和SHA-224签名。

其它资源

  • 更多细节,请参见update-crypto-polies(8)man 页面。

3.2. 将全系统的加密策略切换到与早期版本兼容的模式。

Red Hat Enterprise Linux 8 中默认的全系统加密策略不允许使用旧的、不安全的协议进行通信。对于需要与 Red Hat Enterprise Linux 5 兼容的环境,以及在某些情况下也需要与早期版本兼容的环境,可以使用安全性较低的LEGACY策略级别。

警告

切换到LEGACY策略级别会导致系统和应用的安全性降低。

流程

  1. 要将全系统的加密策略切换到LEGACY级别,以root身份输入以下命令。

    # update-crypto-policies --set LEGACY
    Setting system policy to LEGACY

其它资源

  • 关于可用的加密策略级别列表,请参见update-crypto-policies(8)man 页面。

3.3. 将系统切换到 FIPS 模式

全系统的加密策略包含一个策略级别,使加密模块能够按照联邦信息处理标准(FIPS)出版物140-2的要求进行自我检查。在内部启用或禁用FIPS模式的fips-mode-setup工具使用FIPS全系统的加密策略级别。

重要

Red Hat建议在启用FIPS模式的情况下安装Red Hat Enterprise Linux 8,而不是以后再启用FIPS模式。在安装过程中启用FIPS模式,可以确保系统生成的所有密钥都有FIPS认可的算法和持续的监控测试。

流程

  1. 要在RHEL 8中把系统切换到FIPS模式。

    # fips-mode-setup --enable
    Setting system policy to FIPS
    FIPS mode will be enabled.
    Please reboot the system for the setting to take effect.
  2. 重新启动系统,让内核切换到FIPS模式。

    # reboot

验证步骤

  1. 重新启动后,可以查看FIPS模式的当前状态。

    # fips-mode-setup --check
    FIPS mode is enabled.

其它资源

3.4. 在容器中启用FIPS模式

根据联邦信息处理标准(FIPS)出版物 140-2 的要求,在容器中实现加密模块的自我检查:

先决条件

流程

  1. 从主机将/etc/system-fips文件挂载到容器上。
  2. 设置容器中的FIPS加密策略级别。

    $ update-crypto-policies --set FIPS

RHEL 8.2引入了一种替代方法,用于将容器切换到FIPS模式。它只需要在容器中使用以下命令。

# mount --bind /usr/share/crypto-policies/back-ends/FIPS /etc/crypto-policies/back-ends
注意

在RHEL 8中,fips-mode-setup命令在容器中不能正常工作,在这种情况下不能用来启用或检查FIPS模式。

3.5. 使用不符合FIPS 140-2的加密技术的RHEL应用程序列表

红帽推荐使用核心加密组件集的库,因为它们保证通过所有相关的加密认证,如FIPS 140-2,同时也遵循RHEL全系统的加密策略。

请参阅RHEL8核心加密组件文章,了解RHEL 8核心加密组件的概述、如何选择、如何集成到操作系统中、如何支持硬件安全模块和智能卡以及加密认证如何应用等信息。

除了下表中,在一些RHEL 8 Z-stream版本中(例如8.1.1),Firefox浏览器包已经更新,它们包含一个单独的NSS加密库副本。这样一来,红帽希望避免在补丁发布中对这样一个低级组件进行重新编译的干扰。因此,这些Firefox软件包没有使用FIPS 140-2验证的模块。

表 3.1. 使用不符合FIPS 140-2的加密技术的RHEL 8应用程序列表

应用详细内容

FreeRADIUS

RADIUS协议使用MD5

ghostscript

自己的加密技术(MD5、RC4、SHA-2、AES)来加密和解密文件

ipxe

TLS的加密栈被编译进来,但是,它没有被使用。

java-1.8.0-openjdk

完整的加密栈[a]

libica

通过CPACF指令为RSA和ECDH等各种算法提供软件回退。

Ovmf (UEFI固件), Edk2, shim.

完整的加密堆栈(OpenSSL库的嵌入式副本)。

perl-Digest-HMAC

HMAC, HMAC-SHA1, HMAC-MD5

perl-Digest-SHA

SHA-1, SHA-224, ...

土语

DES、RC4

samba[b]

AES、DES、RC4

valgrind

AES、哈希值[c]

[a] 在RHEL 8.1上,java-1.8.0-openjdk需要额外的手动配置才能符合FIPS标准。
[b] 从RHEL 8.3开始,samba使用符合FIPS标准的加密技术。
[c] 在软件硬件卸载操作中重新实现,如AES-NI。

3.6. 将应用程序从以下系统范围内的加密策略中排除出去。

您可以自定义应用程序使用的加密设置,最好是直接在应用程序中配置支持的密码套件和协议。

你也可以从/etc/crypto-polies/back-ends目录中删除一个与你的应用程序相关的符号链接,并用你自定义的加密设置来替换。此配置可防止使用排除后端的应用程序使用全系统的加密策略。此外,这一修改不受Red Hat支持。

3.6.1. 选择退出全系统加密政策的例子

wget

要自定义wget网络下载器使用的加密设置,使用--secure-protocol--ciphers选项。例如:

$ wget --secure-protocol=TLSv1_1 --ciphers="SECURE128" https://example.com

更多信息请参见wget(1)man 页面的 HTTPS (SSL/TLS) 选项部分。

curl

要指定curl工具使用的密码,可以使用--ciphers选项,并提供一个以冒号分隔的密码列表作为值。例如:

$ curl https://example.com --ciphers '@SECLEVEL=0:DES-CBC3-SHA:RSA-DES-CBC3-SHA'

更多信息请参见curl(1)man 页面。

火狐

尽管在Firefox网页浏览器中不能选择退出系统范围内的加密策略,但你可以在Firefox的配置编辑器中进一步限制支持的密码和TLS版本。在地址栏中输入about:config,并根据需要更改security.tls.version.min选项的值。将security.tls.version.min设置为1,允许TLS 1.0作为最低要求,security.tls.version.min 2允许TLS 1.1,以此类推。

OpenSSH

要退出OpenSSH服务器的系统范围内的加密策略,请在/etc/sysconfig/sshd文件中取消对CRYPTO_POLICY=变量的注释。这一改变之后,您在/etc/ssh/sshd_config文件中的CiphersMACKexAlgoritmsGSSAPIKexAlgorithms部分所指定的值将不会被覆盖。更多信息请参见sshd_config(5)man 页面。

Libreswan

有关详细信息,请参见安全网络文档中配置选择不使用全系统加密策略的IPsec连接

其它资源

  • 更多细节,请参见update-crypto-polies(8)man 页面。

3.7. 使用策略修改器定制全系统的加密策略。

使用此过程调整任何系统范围内的加密策略级别或完全自定义策略的某些算法或协议。

注意

从RHEL 8.2开始,可以定制全系统的加密策略。

流程

  1. 签出到/etc/crypto-policies/policies/modules/目录。

    # cd /etc/crypto-policies/policies/modules/
  2. 例如,为你的调整创建政策模块。

    # touch MYCRYPTO1.pmod
    # touch NO-AES128.pmod
    重要

    在策略模块的文件名中使用大写字母。

  3. 在您选择的文本编辑器中打开策略模块,并插入修改全系统加密策略的选项,例如。

    # vi MYCRYPTO1.pmod
    sha1_in_certs = 0
    min_rsa_size = 3072
    # vi NO-AES128.pmod
    cipher = -AES-128-GCM -AES-128-CCM -AES-128-CTR -AES-128-CBC
  4. 保存模块文件中的更改。
  5. 将您的策略调整应用于DEFAULT系统范围内的加密策略级别。

    # update-crypto-policies --set DEFAULT:MYCRYPTO1:NO-AES128
  6. 要使您的加密设置对已经运行的服务和应用程序有效,请重新启动系统。

    # reboot

其它资源

  • 更多详情,请参见update-crypto-polies(8)man page 中的自定义策略部分和crypto-polies(7)man page 中的加密策略定义格式部分。
  • 如何在RHEL 8.2中定制加密策略一文提供了更多定制全系统加密策略的例子。

3.8. 通过自定义全系统的加密策略禁用SHA-1。

SHA-1哈希函数的设计本身就很脆弱,而密码分析的进步使它很容易受到攻击。默认情况下,RHEL 8不使用SHA-1,但一些第三方应用程序,例如公共签名,仍然使用SHA-1。要在系统中禁止在签名算法中使用SHA-1,可以使用NO-SHA1策略模块。

注意

从RHEL 8.3开始,可以使用禁用SHA-1的模块。从RHEL 8.2开始,可以定制全系统的加密策略。

流程

  1. 将您的策略调整应用于DEFAULT系统范围内的加密策略级别。

    # update-crypto-policies --set DEFAULT:NO-SHA1
  2. 要使您的加密设置对已经运行的服务和应用程序有效,请重新启动系统。

    # reboot

其它资源

  • 更多详情,请参见update-crypto-polies(8)man page 中的自定义策略部分和crypto-polies(7)man page 中的加密策略定义格式部分。
  • 如何在RHEL 8.2中定制加密策略的博文提供了定制全系统加密策略的其他例子。

3.9. 创建和设置自定义的全系统加密策略

下面的步骤演示通过一个完整的策略文件来定制全系统的加密策略。

注意

从RHEL 8.2开始,可以定制全系统的加密策略。

流程

  1. 为您的自定义创建一个策略文件。

    # cd /etc/crypto-policies/policies/
    # touch MYPOLICY.pol

    或者,从四个预定义策略级别中的一个开始复制。

    # cp /usr/share/crypto-policies/policies/DEFAULT.pol /etc/crypto-policies/policies/MYPOLICY.pol
  2. 在你所选择的文本编辑器中编辑你的自定义加密策略文件,以满足你的要求,例如:。

    # vi /etc/crypto-policies/policies/MYPOLICY.pol
  3. 将全系统的加密策略切换到您的自定义级别。

    # update-crypto-policies --set MYPOLICY
  4. 要使您的加密设置对已经运行的服务和应用程序有效,请重新启动系统。

    # reboot

其它资源

  • 更多详情,请参见update-crypto-polies(8)man page 中的自定义策略部分和crypto-polies(7)man page 中的加密策略定义格式部分。
  • 如何在RHEL 8.2中定制加密策略一文提供了更多定制全系统加密策略的例子。

为了尽快向用户提供最新的信息,本文档可能会包括由机器自动从英文原文翻译的内容。如需更多信息,请参阅此说明。