文件首頁
MySQL Connector/J 開發者指南
相關文件 下載本手冊
PDF (US Ltr) - 1.2Mb
PDF (A4) - 1.2Mb


MySQL Connector/J 開發者指南  /  Connector/J 參考  /  使用 SSL 安全連線

6.9 使用 SSL 安全連線

Connector/J 可以使用 SSL 加密 JDBC 驅動程式和伺服器之間傳輸的所有資料(初始交握除外)。啟用連線加密會產生效能損失,其嚴重性取決於多個因素,包括(但不限於)查詢大小、傳回的資料量、伺服器硬體、使用的 SSL 程式庫、網路頻寬等等。

此系統透過兩個 Java 金鑰儲存檔運作:一個檔案包含伺服器的憑證資訊(以下範例中的 truststore),另一個檔案包含用戶端的金鑰和憑證(以下範例中的 keystore)。所有 Java 金鑰儲存檔都受到您在建立檔案時提供給 keytool 的密碼保護。您需要檔案名稱和相關聯的密碼才能建立 SSL 連線。

為了讓 SSL 支援運作,您必須具有下列項目

預設情況下,Connector/J 會與 MySQL 伺服器建立安全連線。請注意,使用 OpenSSL 編譯的 MySQL 伺服器 5.7 及更高版本,可以在啟動時自動產生遺失的 SSL 檔案並相應地設定 SSL 連線。

對於 8.0.12 及更早版本:只要伺服器已正確設定為使用 SSL,就不需要在 Connector/J 用戶端上設定任何項目來使用加密連線(例外情況是當 Connector/J 連接到非常舊的伺服器版本,例如 5.6.25 及更早版本或 5.7.5 及更早版本時,在這種情況下,用戶端必須設定連線屬性 useSSL=true 才能使用加密連線)。用戶端可以透過設定連線屬性 requireSSL=true 來要求使用 SSL;如果伺服器未設定為使用 SSL,則連線會失敗。如果沒有 requireSSL=true,如果伺服器未設定為使用 SSL,則連線只會回復為非加密模式。

對於 8.0.13 及更高版本:只要伺服器已正確設定為使用 SSL,就不需要在 Connector/J 用戶端上設定任何項目來使用加密連線。用戶端可以透過設定連線屬性 sslMode=REQUIREDVERIFY_CAVERIFY_IDENTITY 來要求使用 SSL;如果伺服器未設定為使用 SSL,則連線會失敗。如果使用 sslMode=PREFERRED,如果伺服器未設定為使用 SSL,則連線只會回復為非加密模式。對於 X-Protocol 連線,連線屬性 xdevapi.ssl-mode 指定 SSL 模式設定,就像 sslMode 對於 MySQL-protocol 連線一樣(不同之處在於 X Protocol 不支援 PREFERRED);如果未明確設定,則 xdevapi.ssl-mode 會採用 sslMode 的值(如果未設定 xdevapi.ssl-mode,且 sslMode 設定為 PREFERRED,則 xdevapi.ssl-mode 會設定為 REQUIRED)。

為了提高安全性,您可以設定用戶端進行單向(伺服器或用戶端)或雙向(伺服器和用戶端)SSL 驗證,允許用戶端或伺服器驗證彼此的身分。

TLS 版本:可以使用連線屬性 tlsVersions,以及對於 X DevAPI 連線和 8.0.19 及更高版本,可以使用 xdevapi.tls-versions 來限制允許的 TLS 通訊協定版本(未指定 xdevapi.tls-versions 時,它會採用 tlsVersions 的值)。如果未指定任何此類限制,Connector/J 會嘗試使用 TLSv1.2 和 TLSv1.3 連接到伺服器。

注意事項
  • 自 Connector/J 8.0.28 起,連線屬性 enabledTLSProtocols 已重新命名為 tlsVersions,而 enabledSSLCipherSuites 已重新命名為 tlsCiphersuites;原始名稱仍保留為別名。

  • 對於 Connector/J 8.0.26 及更高版本:TLSv1 和 TLSv1.1 已在 Connector/J 8.0.26 中棄用,並在 8.0.28 版本中移除;移除的值被認為對連線選項和工作階段設定無效。可以使用更安全的 TLSv1.2 和 TLSv1.3 通訊協定進行連線。使用 TLSv1.3 需要使用 OpenSSL 1.1.1 或更高版本編譯伺服器,並且使用支援 TLSv1.3 的 JVM 執行 Connector/J(例如,Oracle Java 8u261 及更高版本)。

  • 對於使用 JDBC API 連接到 MySQL Community Server 5.6 和 5.7 的 Connector/J 8.0.18 及更早版本:由於與使用 yaSSL 編譯的 MySQL Server 存在相容性問題,Connector/J 預設不會啟用使用 TLSv1.2 及更高版本的連線。連線到限制連線使用這些更高 TLS 版本的伺服器時,請透過設定 Connector/J 連線屬性 enabledTLSProtocols 來明確啟用它們(例如,設定 enabledTLSProtocols=TLSv1.2,TLSv1.3)。

加密套件:自 8.0.19 版本起,Connector/J 可使用的加密套件會預先由屬性檔案限制,該檔案位於原始程式碼樹中 src 資料夾內的 src/main/resources/com/mysql/cj/TlsSettings.properties,或在 Connector/J 的與平台無關的發行版本封存檔(.tar.gz.zip 格式)中。該檔案包含四個區段,每個區段列出強制性、核准、已棄用和不可接受的加密。只能使用前三個區段中列出的套件。最後一個區段(不可接受)定義了封鎖不安全加密套件的模式或遮罩。實際上,由於前三個區段中已提供允許清單,因此第四個區段中的封鎖清單模式是多餘的;但它們作為額外保護措施來防止不需要的加密。加密套件的允許清單和封鎖清單適用於 JDBC 和 X DevAPI 連線。

可以使用連線屬性 tlsCiphersuites 來限制 SSL 連線允許的加密套件,而對於 X DevAPI 連線以及 8.0.19 及更高版本,則可以使用 xdevapi.tls-ciphersuites (當未指定 xdevapi.tls-ciphersuites 時,會採用 tlsCiphersuites 的值)。如果沒有指定這些限制,Connector/J 會嘗試建立 SSL 連線,並使用伺服器接受的任何允許清單中的加密套件。