使用新的 SSL/TLS 憑證更新應用程式以連線至 MariaDB 執行個體 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用新的 SSL/TLS 憑證更新應用程式以連線至 MariaDB 執行個體

自 2023 年 1 月 13 日起,Amazon RDS已發佈新的憑證授權機構 (CA) 憑證,用於使用 Secure Socket Layer 或 Transport Layer Security RDS (SSL/) 連線至資料庫執行個體TLS。接下來,您可以找到更新應用程式使用新憑證的相關資訊。

本主題可協助您決定應用程式是否需要驗證憑證,才能連線至您的資料庫執行個體。

注意

有些應用程式設定為只有在成功驗證伺服器上的憑證時,才能連線至 MariaDB。對於這些應用程式,您必須更新用戶端應用程式信任存放區來包含新的 CA 憑證。

您可以指定下列SSL模式:disabledpreferredrequired。當您使用 preferred SSL 模式且 CA 憑證不存在或不是最新的時,連線會回復為未使用SSL,但仍成功連線。

我們建議您避免使用 preferred 模式。在 preferred 模式中,如果連線遇到無效憑證,則會停止使用加密並繼續使用未加密連線。

更新用戶端應用程式信任存放區中的 CA 憑證之後,您就可以在資料庫執行個體輪換憑證。強烈建議先在開發或預備環境中測試這些步驟,再於生產環境中實作。

如需憑證輪換的詳細資訊,請參閱輪換您的 SSL/TLS 憑證。如需下載憑證的詳細資訊,請參閱使用 SSL/TLS 加密與資料庫執行個體或叢集的連線。如需搭配 MariaDB 資料庫執行個體使用 SSL/TLS 的相關資訊,請參閱 SSL/TLS 支援 Amazon 上的 MariaDB 資料庫執行個體 RDS

判斷用戶端是否需要驗證憑證才能連線

您可以檢查JDBC用戶端和我的SQL用戶端是否需要憑證驗證才能連線。

JDBC

下列 MySQL Connector/J 8.0 範例顯示檢查應用程式JDBC連線屬性的一種方法,以判斷成功連線是否需要有效的憑證。如需 My 所有JDBC連線選項的詳細資訊SQL,請參閱 MySQL 文件中的組態屬性

使用 MySQL Connector/J 8.0 時,如果您的SSL連線屬性sslMode已設定為 VERIFY_CA或 ,則連線需要針對伺服器 CA 憑證進行驗證VERIFY_IDENTITY,如下列範例所示。

Properties properties = new Properties(); properties.setProperty("sslMode", "VERIFY_IDENTITY"); properties.put("user", DB_USER); properties.put("password", DB_PASSWORD);
注意

如果您使用 MySQL Java Connector v5.1.38 或更新版本,或 MySQL Java Connector v8.0.9 或更新版本來連線至資料庫,即使您尚未明確將應用程式設定為在連線至資料庫時使用 SSL/TLS,這些用戶端驅動程式仍會預設為使用 SSL/TLS。此外,使用 SSL/ 時TLS,它們會執行部分憑證驗證,並在資料庫伺服器憑證過期時無法連線。

指定此處所顯示提示以外的密碼,作為安全最佳實務。

我的SQL

下列 My Client SQL範例顯示檢查指令碼 MySQL 連線的兩種方式,以判斷成功連線是否需要有效的憑證。如需 MySQL Client 所有連線選項的詳細資訊,請參閱我的SQL文件中加密連線的用戶端組態

使用 MySQL 5.7 或 MySQL 8.0 用戶端時,如果針對您指定的--ssl-mode選項 VERIFY_CA或 ,SSL連線需要針對伺服器 CA 憑證進行驗證VERIFY_IDENTITY,如下列範例所示。

mysql -h mysql-database.rds.amazonaws.com -uadmin -ppassword --ssl-ca=/tmp/ssl-cert.pem --ssl-mode=VERIFY_CA

使用 MySQL 5.6 用戶端時,如果您指定 --ssl-verify-server-cert選項,SSL連線需要對伺服器 CA 憑證進行驗證,如下列範例所示。

mysql -h mysql-database.rds.amazonaws.com -uadmin -ppassword --ssl-ca=/tmp/ssl-cert.pem --ssl-verify-server-cert

更新應用程式信任存放區

如需更新我的SQL應用程式的信任存放區的相關資訊,請參閱 MariaDB 文件中的搭配使用 TLS/SSL 與 MariaDB Connector/J。 MariaDB

如需下載根憑證的資訊,請參閱 使用 SSL/TLS 加密與資料庫執行個體或叢集的連線

如需匯入憑證的範例指令碼,請參閱 將憑證匯入信任存放區的範例指令碼

注意

更新信任存放區時,除了新增憑證,您還可以保留舊憑證。

如果您在應用程式中使用 MariaDB Connector/J JDBC驅動程式,請在應用程式中設定下列屬性。

System.setProperty("javax.net.ssl.trustStore", certs); System.setProperty("javax.net.ssl.trustStorePassword", "password");

啟動應用程式時,設定下列屬性。

java -Djavax.net.ssl.trustStore=/path_to_truststore/MyTruststore.jks -Djavax.net.ssl.trustStorePassword=my_truststore_password com.companyName.MyApplication
注意

指定此處所顯示提示以外的密碼,作為安全最佳實務。

用於建立SSL連線的範例 Java 程式碼

下列程式碼範例示範如何使用 設定SSL連線JDBC。

private static final String DB_USER = "admin"; private static final String DB_USER = "user name"; private static final String DB_PASSWORD = "password"; // This key store has only the prod root ca. private static final String KEY_STORE_FILE_PATH = "file-path-to-keystore"; private static final String KEY_STORE_PASS = "keystore-password"; public static void main(String[] args) throws Exception { Class.forName("org.mariadb.jdbc.Driver"); System.setProperty("javax.net.ssl.trustStore", KEY_STORE_FILE_PATH); System.setProperty("javax.net.ssl.trustStorePassword", KEY_STORE_PASS); Properties properties = new Properties(); properties.put("user", DB_USER); properties.put("password", DB_PASSWORD); Connection connection = DriverManager.getConnection("jdbc:mysql://ssl-mariadb-public.cni62e2e7kwh.us-east-1.rds.amazonaws.com:3306?useSSL=true",properties); Statement stmt=connection.createStatement(); ResultSet rs=stmt.executeQuery("SELECT 1 from dual"); return; }
重要

確定資料庫連線使用 SSL/TLS 並更新應用程式信任存放區後,您可以更新資料庫以使用 rds-ca-rsa2048-g1 憑證。如需說明,請參閱透過修改資料庫執行個體或叢集來更新您的 CA 憑證中的步驟 3。

指定此處所顯示提示以外的密碼,作為安全最佳實務。