更新應用程式使用新的 SSL/TLS 憑證來連線至 Oracle 資料庫執行個體 - Amazon Relational Database Service

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

更新應用程式使用新的 SSL/TLS 憑證來連線至 Oracle 資料庫執行個體

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

本主題可協助您判斷任何用戶端應用程式是否使用 SSL/TLS 連線至您的資料庫執行個體。

重要

當您變更 Amazon RDS for Oracle 資料庫執行個體的憑證時,只會重新啟動資料庫接聽程式。資料庫執行個體不會重新啟動。現有的資料庫連線不會受到影響,但是新的連線將會在重新啟動接聽程式時於短時間內出現錯誤。

注意

對於使用 SSL/TLS 來連線至資料庫執行個體的用戶端應用程式,您必須更新用戶端應用程式信任存放區來包含新的 CA 憑證。

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

如需憑證輪換的詳細資訊,請參閱輪換您的 SSL/TLS 憑證。如需下載憑證的詳細資訊,請參閱使用 SSL/TLS 加密與資料庫執行個體或叢集的連線。如需對 Oracle 資料庫執行個體使用 SSL/TLS 的資訊,請參閱Oracle Secure Sockets Layer

找出應用程式是否使用 SSL 進行連線

如果 Oracle 資料庫執行個體使用的選項群組已加上 SSL 選項,表示您可能在使用 SSL。遵循列出選項群組的選項和選項設定中的指示,檢查是否如此。如需 SSL 選項的資訊,請參閱 Oracle Secure Sockets Layer

檢查接聽程式日誌,判斷是否有 SSL 連線。下列為接聽程式日誌的輸出範例。

date time * (CONNECT_DATA=(CID=(PROGRAM=program) (HOST=host)(USER=user))(SID=sid)) * (ADDRESS=(PROTOCOL=tcps)(HOST=host)(PORT=port)) * establish * ORCL * 0

當某個項目的 PROTOCOLtcps 值時,即表示 SSL 連線。不過,當 HOST127.0.0.1 時,您可以忽略該項目。來自 127.0.0.1 的連線是資料庫執行個體上的本機管理代理程式。這些 連線不是外部 SSL 連線。因此,如果您看到接聽程式日誌項目的 PROTOCOLtcps,而 HOST 不是 127.0.0.1,表示有應用程式使用 SSL 來連線。

若要檢查接聽程式日誌,您可以將日誌發佈到 Amazon CloudWatch Logs。如需更多詳細資訊,請參閱 將 Oracle 日誌發佈至 Amazon CloudWatch Logs

更新應用程式信任存放區

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

為 SQL*Plus 更新應用程式信任存放區

您可以為使用 SQL*Plus 建立 SSL/TLS 連線的應用程式更新信任存放區。

注意

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

為 SQL*Plus 應用程式更新信任存放區
  1. 下載適用於所有 AWS 區域的新根憑證,並將檔案放入 ssl_wallet 目錄。

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

  2. 執行下列命令來更新 Oracle 錢包。

    prompt>orapki wallet add -wallet $ORACLE_HOME/ssl_wallet -trusted_cert -cert $ORACLE_HOME/ssl_wallet/ssl-cert.pem -auto_login_only

    將檔案名稱換成您下載的檔案名稱。

  3. 執行下列命令,以確認已成功更新錢包。

    prompt>orapki wallet display -wallet $ORACLE_HOME/ssl_wallet

    輸出應包含以下內容。

    Trusted Certificates: Subject: CN=Amazon RDS Root 2019 CA,OU=Amazon RDS,O=Amazon Web Services\, Inc.,L=Seattle,ST=Washington,C=US

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

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

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

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

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

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

import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class OracleSslConnectionTest { private static final String DB_SERVER_NAME = "<dns-name-provided-by-amazon-rds>"; private static final Integer SSL_PORT = "<ssl-option-port-configured-in-option-group>"; private static final String DB_SID = "<oracle-sid>"; 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 SQLException { final Properties properties = new Properties(); final String connectionString = String.format( "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=%s)(PORT=%d))(CONNECT_DATA=(SID=%s)))", DB_SERVER_NAME, SSL_PORT, DB_SID); properties.put("user", DB_USER); properties.put("password", DB_PASSWORD); properties.put("oracle.jdbc.J2EE13Compliant", "true"); properties.put("javax.net.ssl.trustStore", KEY_STORE_FILE_PATH); properties.put("javax.net.ssl.trustStoreType", "JKS"); properties.put("javax.net.ssl.trustStorePassword", KEY_STORE_PASS); final Connection connection = DriverManager.getConnection(connectionString, properties); // If no exception, that means handshake has passed, and an SSL connection can be opened } }
重要

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