要为 BCFIPS 仅批准模式配置 JRE,请执行以下操作:
将 BCFIPS.jar 文件添加到 Java 类路径。
所需的 BCFIPS 文件如下:
bc-fips-1.0.2.4.jar
bcpkix-fips-1.0.7.jar
bctls-fips-1.0.18.jar
修改 <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。