本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
更新應用程序以使用新SSL/TLS證書連接到我的數據SQL庫實例
自 2023 年 1 月 13 日起,Amazon RDS 已發佈新的憑證授權單位 (CA) 憑證,以使用安全通訊端層或傳輸層安全性 (SSL/TLS) 連接至RDS資料庫執行個體。接下來,您可以找到更新應用程式使用新憑證的相關資訊。
本主題可協助您判斷是否有任何用戶端應用程式使用SSL/連線TLS至資料庫執行個體。若是如此,您可以進一步檢查那些應用程式是否需要驗證憑證才能連線。
注意
有些應用程式只有在能夠成功驗證伺服器上的憑證時,才會設定為連線到 My SQL DB 執行個體。對於這些應用程式,您必須更新用戶端應用程式信任存放區來包含新的 CA 憑證。
您可以指定下列SSL模式:disabled
preferred
、和required
。當您使用該preferred
SSL模式並且 CA 憑證不存在或不是最新的時候,連線會回復為不使用,SSL並在沒有加密的情況下連線。
因為這些較新版本使用 Open SSL 通訊協定,因此除非指定required
SSL模式,否則過期的伺服器憑證不會阻止成功連線。
我們建議您避免使用 preferred
模式。在 preferred
模式中,如果連線遇到無效憑證,則會停止使用加密並繼續使用未加密連線。
更新用戶端應用程式信任存放區中的 CA 憑證之後,您就可以在資料庫執行個體輪換憑證。強烈建議先在開發或預備環境中測試這些步驟,再於生產環境中實作。
如需憑證輪換的詳細資訊,請參閱輪換您的 SSL/TLS 憑證。如需下載憑證的詳細資訊,請參閱使用 SSL/TLS 加密與資料庫執行個體或叢集的連線。如需將SSL/TLS與 My SQL DB 執行個體搭配使用的相關資訊,請參閱SSL/TLS 支援 Amazon 上的 MySQL 資料庫執行個體 RDS。
判斷是否有任何應用程式使用連線到 My SQL DB 執行個體 SSL
如果您將 Amazon 用RDS於 My 5.7 或 8.0 SQL 版,且已啟用效能結構描述,請執行下列查詢以檢查連線是否正在使用SSL/TLS。如需有關啟用效能結構描述的資訊,請參閱我的SQL文件中的 < 效能結構描述快速
mysql> SELECT id, user, host, connection_type FROM performance_schema.threads pst INNER JOIN information_schema.processlist isp ON pst.processlist_id = isp.id;
在此示例輸出中,您可以看到自己的 session (admin
) 和以正在使用的方式登錄的應webapp1
用程序SSL。
+----+-----------------+------------------+-----------------+ | 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用戶端和我的用SQL戶端是否需要憑證驗證才能連線。
JDBC
以下帶有 My SQL Connector /J 8.0 的示例顯示了檢查應用程序的JDBC連接屬性以確定成功連接是否需要有效證書的一種方法。如需 [我的] 所有JDBC連線選項的詳細資訊SQL,請參閱我的SQL文件中的組態屬性
使用 My SQL Connector /J 8.0 時,如果您的SSL連接屬性已sslMode
設置為VERIFY_CA
或,則連接需要對數據庫服務器證書進行驗證VERIFY_IDENTITY
,如以下示例所示。
Properties properties = new Properties(); properties.setProperty("sslMode", "VERIFY_IDENTITY"); properties.put("user", DB_USER); properties.put("password", DB_PASSWORD);
注意
如果您使用 My SQL Java 連接器 v5.1.38 或更新版本,或 My SQL Java 連接器 v8.0.9 或更新版本連接到資料庫,即使您尚未明確設定應用程式在連線至資料庫TLS時使用SSL/,這些用戶端驅動程式預設為使用/。SSL TLS此外,使用SSL/時TLS,它們會執行部分憑證驗證,如果資料庫伺服器憑證已過期,則無法連線。
我的 SQL
下列「我的SQL用戶端」的範例顯示兩種檢查指令碼的「我的SQL連線」的方法,以判斷成功的連線是否需要有效的憑證。如需 [我的用SQL戶端] 之所有連線選項的詳細資訊,請參閱我的SQL文件中的加密連線的用戶端組態
使用 My SQL 5.7 或 My SQL 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
使用 My SQL 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應用程式之信任存放區的相關資訊,請參閱我的SQL文件中的安裝SSL憑證
如需下載根憑證的資訊,請參閱 使用 SSL/TLS 加密與資料庫執行個體或叢集的連線。
如需匯入憑證的範例指令碼,請參閱 將憑證匯入信任存放區的範例指令碼。
注意
更新信任存放區時,除了新增憑證,您還可以保留舊憑證。
如果您在應用程JDBC序中使用 mysql 驅動程序,請在應用程序中設置以下屬性。
System.setProperty("javax.net.ssl.trustStore",
certs
); System.setProperty("javax.net.ssl.trustStorePassword", "password
");
啟動應用程式時,設定下列屬性。
java -Djavax.net.ssl.trustStore=
/path_to_trust_store/MyTruststore.jks
-Djavax.net.ssl.trustStorePassword=my_trust_store_password
com.companyName.MyApplication
注意
指定此處所顯示提示以外的密碼,作為安全最佳實務。
建立SSL連線的 Java 程式碼範例
下列程式碼範例顯示如何設定使JDBC用驗證伺服器憑證的SSL連線。
public class MySQLSSLTest { private static final String DB_USER = "
username
"; private static final String DB_PASSWORD = "password
"; // This trust store has only the prod root ca. private static final String TRUST_STORE_FILE_PATH = "file-path-to-trust-store
"; private static final String TRUST_STORE_PASS = "trust-store-password
"; public static void test(String[] args) throws Exception { Class.forName("com.mysql.jdbc.Driver"); System.setProperty("javax.net.ssl.trustStore", TRUST_STORE_FILE_PATH); System.setProperty("javax.net.ssl.trustStorePassword", TRUST_STORE_PASS); Properties properties = new Properties(); properties.setProperty("sslMode", "VERIFY_IDENTITY"); properties.put("user", DB_USER); properties.put("password", DB_PASSWORD); Connection connection = null; Statement stmt = null; ResultSet rs = null; try { connection = DriverManager.getConnection("jdbc:mysql://mydatabase.123456789012.us-east-1.rds.amazonaws.com:3306
",properties); stmt = connection.createStatement(); rs=stmt.executeQuery("SELECT 1 from dual"); } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { } } if (stmt != null) { try { stmt.close(); } catch (SQLException e) { } } if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } return; } }
重要
判斷資料庫連線使用SSL/TLS並更新應用程式信任存放區之後,您可以更新資料庫以使用 rds-ca-rsa 2048-g1 憑證。如需說明,請參閱透過修改資料庫執行個體或叢集來更新您的 CA 憑證中的步驟 3。
指定此處所顯示提示以外的密碼,作為安全最佳實務。