7.0 为 FIPS 配置 JRE

要为 BCFIPS 仅批准模式配置 JRE,请执行以下操作:

  1. 将 BCFIPS.jar 文件添加到 Java 类路径。

    所需的 BCFIPS 文件如下:

    • bc-fips-1.0.2.4.jar

    • bcpkix-fips-1.0.7.jar

    • bctls-fips-1.0.18.jar

  2. 修改 <jre 根目录>/conf/security 目录下的 java.security 文件,并设置 BCFIPS 定义的 Java 系统属性。

    在文本编辑器中,从 <jre 根目录>/conf/security/java.security 打开托管 Web 容器的 JRE 的上述文件。找到安全提供程序列表,注释掉所有现有提供程序,然后如下所示替换文件中的项:

    • security.provider.1=BCFIPS

    • security.provider.2=BCJSSE

    • security.provider.3=SunJSSE

    • security.provider.4=SUN

    • security.provider.5=SunJCE

必须指定 SunJSSE 提供程序 (Java 11),因为 OSP 在初始化其可信证书存储区时需要特定的 TrustManager 实现。除了对安全提供程序进行更改之外,还必须使用 BCFIPS JSSE KeyManager 实现。这种必要性主要是因为 Sun 实现中存在缺陷,导致无法在一定程度上做到 FIPS 在密钥方面要求的确定性。为此,请将 java.security 中的以下行:

ssl.KeyManagerFactory.algorithm=SunX509

替换成

ssl.KeyManagerFactory.algorithm=PKIX

另外,最好禁用较旧的 SSL 和 TLS 算法。这是因为,TLS v2.0 之前的 SSL/TLS 版本所需的算法在 BCFIPS 已批准模式下不可用。要禁用旧算法,请找到 jdk.tls.disabledAlgorithms 项。例如:

jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 1024, \ EC keySize < 224, DES40_CBC, RC4_40, 3DES_EDE_CBC

将 TLSv1 和 TLSv1.1 添加到列表中:

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, MD5withRSA, DH keySize < 1024, \ EC keySize < 224, DES40_CBC, RC4_40, 3DES_EDE_CBC

禁用 TLSv1 和 TLSv1.1 不是强制要求,但这样可以避免在 OSP 尝试安全连接到仅支持 TLS v1.1 或更低版本的服务(例如 LDAP)时出现不明所以的错误讯息。禁用较低 TLS 版本后出现的错误讯息更容易理解,并且可以直接指明问题所在。

注:eDirectory 8.8(或更低版本)无法与安全 LDAP 一起使用,因为它仅支持 TLS v1.0。如果要使用安全 LDAP,则必须使用 eDirectory 9 或更高版本。另一种做法是修改默认的密钥存储区类型。找到 keystore.type=jks 或 keystore.type=pkcs12 行,将其更改为 keystore.type=bcfks。