使用 FIPS 在 RHEL 上配置红帽构建的 OpenJDK 11
摘要
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
对红帽文档提供反馈
我们感谢您对我们文档的反馈。要提供反馈,您可以突出显示文档中的文本并添加注释。
本节介绍如何提交反馈。
先决条件
- 已登陆到红帽客户门户网站。
- 在红帽客户门户中,以多页 HTML 格式查看文档。
流程
要提供反馈,请执行以下步骤:
点文档右上角的反馈按钮查看现有的反馈。
注意反馈功能仅在多页 HTML 格式中启用。
- 高亮标记您要提供反馈的文档中的部分。
点在高亮文本旁弹出的 Add Feedback。
文本框将在页面右侧的"反馈"部分中打开。
在文本框中输入您的反馈,然后点 Submit。
创建了一个与文档相关的问题。
- 要查看问题,请单击反馈视图中的问题跟踪器链接。
第 1 章 联邦信息处理标准(FIPS)简介
联邦信息处理标准(FIPS)提供了改进跨计算机系统和网络的安全与互操作性的指南和要求。FIPS 140-2 和 140-3 系列适用于硬件和软件级别的加密模块。美国国家标准与技术研究院使用可搜索处理和批准的加密模块列表实施 加密模块验证计划。
Red Hat Enterprise Linux (RHEL)提供了一种集成框架,可在系统范围内启用 FIPS 140-2 合规性。当在 FIPS 模式下运行时,使用加密库的软件包会根据全局策略自行配置。大多数软件包都提供了一种更改默认对齐行为的方法,以满足兼容性或其他需求。
Red Hat build of OpenJDK 11 是一个 FIPS 策略感知型软件包。
其他资源
- 有关如何启用 FIPS 模式安装 RHEL 的更多信息,请参阅 安装启用了 FIPS 模式的 RHEL 8 系统。
- 有关如何在安装 RHEL 后如何启用 FIPS 模式的更多信息,请参阅 将系统切换到 FIPS 模式。
- 有关如何在 RHEL 上以 FIPS 模式运行红帽构建的 OpenJDK 的更多信息。请参阅在 RHEL 上以 FIPS 模式运行 OpenJDK。
- 有关红帽遵守政府标准的更多信息,请参阅 政府标准。
第 2 章 以 FIPS 模式配置红帽构建的 OpenJDK 11
Red Hat build of OpenJDK 11 会检查系统是否在启动时启用 FIPS 模式。如果是,它会根据全局策略自行配置 FIPS。从 RHEL 8.3 开始,这是默认行为。以前的 RHEL 8 版本需要将 com.redhat.fips
系统属性设置为 true
作为 JVM 参数。例如,-Dcom.redhat.fips=true
。
如果在 JVM 实例运行时在系统中启用了 FIPS 模式,需要重启实例才能使更改生效。
有关如何启用 FIPS 模式的更多信息,请参阅 将系统切换到 FIPS 模式。
您可以配置红帽构建的 OpenJDK 11,以绕过全局 FIPS 对齐。例如,您可能希望通过硬件安全模块(HSM)而不是红帽构建的 OpenJDK 提供的方案启用 FIPS 合规性。
以下是红帽构建的 OpenJDK 11 的 FIPS 属性:
security.useSystemPropertiesFile
-
安全属性位于
$JAVA_HOME/conf/security/java.security
或 文件中定向到java.security.properties
。 -
需要特权访问权限来修改默认的
java.security
文件中的值。 - 永久配置。
-
当设置为
false
时,全局 FIPS 和 crypto-policies 对齐都会被禁用。默认情况下,它被设置为true
。
-
安全属性位于
java.security.disableSystemPropertiesFile
-
作为参数传递到 JVM 的系统属性。例如,
-Djava.security.disableSystemPropertiesFile=true
。 - 非特权访问权限足够。
- 非持久性配置。
-
当设置为
true
时,全局 FIPS 和 crypto-policies 对齐都会被禁用;生成与security.useSystemPropertiesFile=false
安全属性相同的效果。如果这两个属性都被设置为不同的行为,则java.security.disableSystemPropertiesFile
覆盖。默认情况下,它被设置为false
。
-
作为参数传递到 JVM 的系统属性。例如,
com.redhat.fips
-
作为参数传递至 JVM 的系统属性。例如,
-Dcom.redhat.fips=false
。 - 非特权访问权限足够。
- 非持久性配置。
-
当设置为
false
时,禁用 FIPS 对齐,同时仍然应用全局 crypto-policies。如果将任何上述属性设置为禁用 crypto-policies 对齐,则此属性无效。换句话说,crypto-policies 是 FIPS 校准的先决条件。默认情况下,它被设置为true
。
-
作为参数传递至 JVM 的系统属性。例如,
第 3 章 红帽构建的 OpenJDK 11 中的默认 FIPS 配置
安全供应商
红帽构建的 OpenJDK 安全策略由全局 java 安全策略文件控制。您可以在 $JRE_HOME/lib/security/java.security
处找到 java 安全策略文件。
启用 FIPS 模式后,红帽构建的 OpenJDK 将安装的安全供应商替换为以下供应商(以降序排列):
SunPKCS11-NSS-FIPS
使用网络安全服务(NSS)软件令牌初始化的 密码套件(PKCS facilities 后端)。NSS 服务帐户令牌配置如下:
- name = NSS-FIPS
- nssLibraryDirectory = /usr/lib64
- nssSecmodDirectory = /etc/pki/nssdb
- nssDbMode = readOnly
- nssModule = fips
- NSS 库实现 FIPS 兼容的软件令牌。另外,RHEL 中对 FIPS 策略的识别。
SUN
-
对于 X.509 证书只支持。确保您的应用程序没有使用这个供应商的其他加密算法。例如,
MessageDigest.getInstance ("SHA-256", Security.getProvider ("SUN"))
可以正常工作,但导致一个非FIPS 兼容的MessageDigest
服务。
SunEC
- 对于 SunPKCS11 辅助帮助程序。确保您的应用程序没有被明确使用此供应商。
SunJSSE
-
使用
SunPKCS11-NSS-FIPS
供应商初始化 TLS 引擎所需的所有加密原语,包括密钥派生。
crypto-policies
启用 FIPS 模式后,红帽构建的 OpenJDK 从全局 crypto-policies 获取加密算法的配置值。您可以在 /etc/crypto-policies/back-ends/java.config
中找到这些值。您可以使用 RHEL 中的 update-crypto-policies
工具以一致的方式管理 crypto-policies。
在 OpenJDK 的 FIPS 模式的 Red Hat build 中可能无法使用 crypto-policies 批准算法。当 NSS 库中没有与 FIPS 兼容的实现,或者红帽构建的 OpenJDK 的 SunPKCS11 安全供应商不支持它时,会出现这种情况。
信任 Anchor 证书
Red Hat build of OpenJDK 在 FIPS 模式下使用全局信任 Anchor 证书存储库。您可以在 /etc/pki/java/cacerts
中找到此存储库。使用 RHEL 中的 update-ca-trust
工具以一致的方式管理证书。
密钥存储
使用 FIPS 模式时,红帽构建的 OpenJDK 使用 NSS DB 作为密钥的只读 PKCS
postStart 存储。因此,store .type
安全属性被设置为 PKCS11
。您可以在 /etc/pki/nssdb
找到 NSS DB 存储库。使用 RHEL 中的 modutil
工具来管理 NSS DB 密钥。
SunPKCS11
供应商配置属性
SunPKCS11
供应商包括增强使用原生资源的配置属性,如密钥对象。SunPKCS11
供应商必须使用其原生资源来与原生 PKCS11
库一起工作。
表 3.1. SunPKCS11
供应商配置属性
属性 | 类型 | 描述 |
---|---|---|
| 布尔值 |
默认值为 |
| 整数 |
默认值为
注: 如果清除队列中没有原生 PKCS11 引用,清理线程将切换为使用 |
| 整数 |
默认值为
注: 当线程检测到清除队列中的原生 PKCS11 引用时,清理器线程切换会使用 |
更新于 2023-09-20