當使用 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
指定的金鑰儲存區類型。