搜索

第 2 章 红帽构建的 OpenJDK 21 中的 FIPS 设置

download PDF

在启动时,红帽构建的 OpenJDK 21 会检查系统 FIPS 策略是否已启用。如果启用了此策略,红帽构建的 OpenJDK 21 会执行一系列自动配置,用于帮助 Java 应用程序遵守 FIPS 要求。

这些自动配置包括以下操作:

  • 为加密操作安装包含 FIPS 认证的网络安全服务(NSS)软件令牌模块的受限安全供应商列表
  • 为 Java 强制 Red Hat Enterprise Linux (RHEL) FIPS 加密策略,该策略限制可用的算法和参数
注意

如果在 JVM 实例运行时在系统中启用了 FIPS 模式,则必须重启 JVM 实例,以允许更改生效。

您可以配置红帽构建的 OpenJDK 21,以绕过上述 FIPS 自动化。例如,您可能希望通过硬件安全模块(HSM)而不是 NSS 软件令牌模块实现 FIPS 合规性。

您可以使用 system安全属性 指定 FIPS 配置。

要更好地了解 FIPS 属性,您必须了解以下 JDK 属性类:

  • 系统属性是前缀为 -D 的 JVM 参数,它通常采用 -Dproperty.name=property.value 的形式。不需要特权访问权限来传递这些值。只有启动的 JVM 会受到配置的影响,持久性取决于存在启动程序脚本。UTF-8 编码的值对系统属性有效。
  • 安全属性在 $JRE_HOME/conf/security/java.securityjava.security.properties 系统属性指向的文件中提供。修改 $JRE_HOME/conf/security/java.security 文件中的值需要特权访问权限。对此文件的任何修改都会保留,并影响到同一红帽构建 OpenJDK 21 部署的所有实例。非基本拉丁 Unicode 字符必须使用 \uXXXX 编码。

当系统和安全属性的名称相同并且设置为不同的值时,系统属性会优先使用。根据配置,属性可能会影响具有不同名称的其他属性。

有关安全属性及其默认值的更多信息,请参阅 java.security 文件。

以下列表详细介绍了影响红帽构建的 OpenJDK 21 的 FIPS 配置的属性:

属性类型默认值描述

security.useSystemPropertiesFile

安全性

true

当设置为 false 时,此属性禁用 FIPS 自动化,其中包括全局 crypto-policies 对齐。

java.security.disableSystemPropertiesFile

System

false

当设置为 true 时,此属性禁用 FIPS 自动化,其中包括全局 crypto-policies 校准。这与 security.useSystemPropertiesFile=false 安全属性的作用相同。如果两个属性都被设置为不同的行为,则 java.security.disableSystemPropertiesFile 将具有优先权。

com.redhat.fips

System

true

当设置为 false 时,此属性在仍然强制执行 FIPS crypto-policy 时禁用 FIPS 自动化。如果将上述任何属性设置为禁用 FIPS 自动化,则此属性无效。crypto-policies 是 FIPS 自动化的先决条件。

fips.keystore.type

安全性

PKCS12

当红帽构建的 OpenJDK 21 处于 FIPS 模式时,此属性设置默认密钥存储类型。支持的值有 PKCS12PKCS11

除了前面描述的设置外,也可以将特定配置应用到在 FIPS 模式下使用 NSS DB 密钥存储。这些密钥存储由 SunPKCS11 安全提供程序和 NSS 软件令牌处理,后者是安全供应商的 PKCS facilities 后端。

以下列表详细介绍了红帽构建的 OpenJDK 21 的 NSS DB FIPS 属性:

属性类型默认值描述

fips.nssdb.path

系统或安全性

sql:/etc/pki/nssdb

指向 NSS DB 位置的文件系统路径。

此属性的语法与 SunPKCS11 NSS 配置文件中的 nssSecmodDirectory 属性相同。属性允许 sql: 前缀来指示引用的 NSS DB 是 SQLite 类型。

fips.nssdb.pin

系统或安全性

pin:
(empty PIN)

fips.nssdb.path 指向的 NSS DB 的 PIN (密码)。

您可以使用此属性以以下形式传递 NSS DB PIN:

  • pin:<value>

    在这种情况下,&lt ;value& gt; 是一个明文 PIN 值(例如: pin:1234abc)。

  • env:<value>

    在这种情况下,&lt ;value > 是一个包含 PIN 值的环境变量(例如: env:NSSDB_PIN_VAR)。

  • file:<value>

    在这种情况下,& lt;value > 是 UTF-8 编码文件的路径,其中包含其第一行中的 PIN 值(例如 file:/path/to/pin.txt)。

pin:<value > 选项适合两个情况下,PIN 值作为 JVM 参数传递,或者通过系统属性以编程方式传递。PIN 值的编程设置为应用程序提供了灵活性,以决定如何获取 PIN。

file:<value > 选项与 NSS modutil -pwfile-newpwfile 参数兼容,该参数用于 NSS DB PIN 更改。

注意

如果加密操作需要 NSS DB 身份验证,且状态没有被验证,Red Hat build of OpenJDK 21 会执行带有这个 PIN 值的隐式登录。应用可以通过在任何加密操作前调用 KeyStore::load 来执行显式登录。

重要

执行安全评估,以便您可以决定保护所存储密钥和证书的完整性和机密性的配置。此评估应考虑威胁、上下文信息和其他安全措施,如操作系统用户隔离和文件系统权限。例如,默认配置值可能不适用于存储键的应用程序,并在多用户环境中运行。使用 RHEL 中的 modutil 工具创建和管理 NSS DB 密钥存储,并使用 certutilkeytool 导入证书和密钥。

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.