当使用 Java 8 到 12 JRE 时,如果 JSSE 配置为使用 FIPS 模式,则尝试连接到 MySQL 服务器在某些情况下可能会失败,并出现 KeyManagementException
错误,提示 "FIPS 模式:只能使用 SunJSSE TrustManagers
"。 这是因为在这种情况下,Connector/J 实现的自定义 TrustManager
支持不同的 sslMode
选项,但最终会被 SunJSSE 的默认实现拒绝。
可以通过告诉 Connector/J 不要使用其自定义的 TrustManager
实现,而是使用您自己的安全提供程序来解决此问题。 这可以通过设置以下连接属性来完成
-
fipsCompliantJsse
: 设置为true
来解决 FIPS 模式下提到的问题。注意当设置为 true 时,Connector/J 始终执行服务器证书验证(即使
sslMode
设置为PREFERRED
或REQUIRED
),这意味着必须使用下面描述的连接属性配置一个信任库,或者必须启用回退的系统范围信任库。 KeyManagerFactoryProvider
: 提供javax.net.ssl.KeyManagerFactory
实现的 Java 安全提供程序的名称。trustManagerFactoryProvider
: 提供javax.net.ssl.TrustManagerFactory
实现的 Java 安全提供程序的名称。keyStoreProvider
: 提供java.security.KeyStore
实现的 Java 安全提供程序的名称,支持使用clientCertificateKeyStoreType
和trustCertificateKeyStoreType
指定的密钥存储类型。