

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

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

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

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

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

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

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

如需憑證輪換的詳細資訊，請參閱[輪換您的 SSL/TLS 憑證](UsingWithRDS.SSL-certificate-rotation.md)。如需下載憑證的詳細資訊，請參閱[使用 SSL/TLS 加密與資料庫執行個體或叢集的連線](UsingWithRDS.SSL.md)。如需對 Oracle 資料庫執行個體使用 SSL/TLS 的資訊，請參閱[Oracle Secure Sockets Layer](Appendix.Oracle.Options.SSL.md)。

**Topics**
+ [

## 找出應用程式是否使用 SSL 進行連線
](#ssl-certificate-rotation-oracle.determining)
+ [

## 更新應用程式信任存放區
](#ssl-certificate-rotation-oracle.updating-trust-store)
+ [

## 建立 SSL 連線的 Java 程式碼範例
](#ssl-certificate-rotation-oracle.java-example)

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


如果 Oracle 資料庫執行個體使用的選項群組已加上 `SSL` 選項，表示您可能在使用 SSL。遵循[列出選項群組的選項和選項設定](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ListOption)中的指示，檢查是否如此。如需 `SSL` 選項的資訊，請參閱 [Oracle Secure Sockets Layer](Appendix.Oracle.Options.SSL.md)。

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

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

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

若要檢查接聽程式日誌，您可以將日誌發佈到 Amazon CloudWatch Logs。如需更多詳細資訊，請參閱 [將 Oracle 日誌發佈至 Amazon CloudWatch Logs](USER_LogAccess.Concepts.Oracle.md#USER_LogAccess.Oracle.PublishtoCloudWatchLogs)。

## 更新應用程式信任存放區


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

### 為 SQL\$1Plus 更新應用程式信任存放區


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

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

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

1. 下載適用於所有 AWS 區域的新根憑證，並將 檔案放在 `ssl_wallet`目錄中。

   如需下載根憑證的資訊，請參閱 [使用 SSL/TLS 加密與資料庫執行個體或叢集的連線](UsingWithRDS.SSL.md)。

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

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

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

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

   ```
   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 加密與資料庫執行個體或叢集的連線](UsingWithRDS.SSL.md)。

如需匯入憑證的範例指令碼，請參閱 [將憑證匯入信任存放區的範例指令碼](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-sample-script)。

## 建立 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 憑證。如需說明，請參閱[透過修改資料庫執行個體或叢集來更新憑證授權機構憑證](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-updating)中的步驟 3。