將應用程式更新為使用新的 TLS 憑證來連線至 Aurora MySQL 資料庫叢集 - Amazon Aurora

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

將應用程式更新為使用新的 TLS 憑證來連線至 Aurora MySQL 資料庫叢集

自 2023 年 1 月 13 日起,Amazon RDS 已發佈新的憑證認證機構 (CA) 憑證,使用 Transport Layer Security (TLS) 來連線至 Aurora 資料庫叢集。接下來,您可以找到更新應用程式使用新憑證的相關資訊。

本主題可協助您判斷任何用戶端應用程式是否使用 TLS 連線至您的資料庫叢集。若是如此,您可以進一步檢查那些應用程式是否需要驗證憑證才能連線。

注意

有些應用程式設定為只有在成功驗證伺服器上的憑證時,才能連線至 Aurora MySQL 資料庫叢集。

對於這些應用程式,您必須更新用戶端應用程式信任存放區來包含新的 CA 憑證。

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

如需憑證輪換的詳細資訊,請參閱輪換您的 SSL/TLS 憑證。如需下載憑證的詳細資訊,請參閱使用 SSL/TLS 加密與資料庫叢集的連線。如需搭配 Aurora MySQL 資料庫叢集使用 /TLS 的相關資訊,請參閱 TLS Aurora MySQL 資料庫叢集的連線

判斷任何應用程式是否使用 TLS 連線至 Aurora MySQL 資料庫叢集

如果您使用 Aurora MySQL 第 2 版 (與 MySQL 5.7 相容),且效能結構描述已啟用,請執行下列查詢,以檢查連線是否使用 TLS。如需啟用效能結構描述的資訊,請參閱 MySQL 文件中的效能結構描述快速入門

mysql> SELECT id, user, host, connection_type FROM performance_schema.threads pst INNER JOIN information_schema.processlist isp ON pst.processlist_id = isp.id;

在此輸出範例中,可看到您自己的工作階段 (admin) 和以 webapp1 登入的應用程式都使用 TLS。

+----+-----------------+------------------+-----------------+ | id | user | host | connection_type | +----+-----------------+------------------+-----------------+ | 8 | admin | 10.0.4.249:42590 | SSL/TLS | | 4 | event_scheduler | localhost | NULL | | 10 | webapp1 | 159.28.1.1:42189 | SSL/TLS | +----+-----------------+------------------+-----------------+ 3 rows in set (0.00 sec)

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

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

JDBC

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

使用 MySQL Connector/J 8.0 時,如果連線屬性的 sslMode 設為 VERIFY_CAVERIFY_IDENTITY,則需要以伺服器 CA 憑證來驗證 TLS 連線,如下列範例所示。

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 或更高版本來連線至您的資料庫,即使您尚未明確設定應用程式在連線到資料庫時使用 TLS,這些用戶端驅動程式會預設為使用 TLS。此外,使用 TLS 時,它們會執行部分憑證驗證,如果資料庫伺服器憑證已過期,則無法連線。

MySQL

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

使用 MySQL 5.7 或 MySQL 8.0 用戶端時,如果您將 --ssl-mode 選項指定為 VERIFY_CAVERIFY_IDENTITY,則需要以伺服器 CA 憑證來驗證 TLS 連線,如下列範例所示。

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 選項,則需要以伺服器 CA 憑證來驗證 SSL 連線,如下列範例所示。

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

更新應用程式信任存放區

如需為 MySQL 應用程式更新信任存放區的資訊,請參閱 MySQL 文件中的安裝 SSL 憑證

注意

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

為 JDBC 更新應用程式信任存放區

您可以為使用 JDBC 建立 TLS 連線的應用程式更新信任存放區。

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

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

如果您在應用程式中使用 mysql 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

建立 TLS 連線的 Java 程式碼範例

下列程式碼範例示範如何使用 JDBC 設定 SSL 連線,以驗證伺服器憑證。

public class MySQLSSLTest { 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 test(String[] args) throws Exception { Class.forName("com.mysql.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.setProperty("sslMode", "VERIFY_IDENTITY"); properties.put("user", DB_USER); properties.put("password", DB_PASSWORD); Connection connection = DriverManager.getConnection("jdbc:mysql://jagdeeps-ssl-test.cni62e2e7kwh.us-east-1.rds.amazonaws.com:3306",properties); Statement stmt=connection.createStatement(); ResultSet rs=stmt.executeQuery("SELECT 1 from dual"); return; } }
重要

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