

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

# Oracle Secure Sockets Layer
<a name="Appendix.Oracle.Options.SSL"></a>

在與資料庫執行個體相關聯的選項群組中新增 Oracle SSL 選項，就能對 RDS for Oracle 資料庫執行個體啟用 SSL 加密。Amazon RDS 會使用第二個連接埠 (依 Oracle 要求) 作為 SSL 連線用途。此方法可讓資料庫執行個體與 SQL\$1Plus 之間同時進行純文字和 SSL 加密的通訊。例如，您可以使用連接埠搭配純文字通訊與 VPC 內的其他資源通訊，同時使用連接埠搭配 SSL 加密的通訊與 VPC 外部的資源通訊。

**注意**  
您可以在相同的 RDS for Oracle 資料庫執行個體上使用 SSL 或原生網路加密 (NNE)，但不能同時使用這兩者。如果您使用 SSL 加密，請務必關閉任何其他連線加密。如需詳細資訊，請參閱[Oracle 原生網路加密](Appendix.Oracle.Options.NetworkEncryption.md)。

SSL/TLS 和 NNE 不再是 Oracle 進階安全性的一部分。您可以對下列 Oracle 資料庫版本的所有版本使用 SSL 加密：
+ Oracle Database 21c (21.0.0)
+ Oracle 資料庫 19c (19.0.0)

**Topics**
+ [

## Oracle SSL 選項的 TLS 版本
](#Appendix.Oracle.Options.SSL.TLS)
+ [

## Oracle SSL 選項的密碼套件
](#Appendix.Oracle.Options.SSL.CipherSuites)
+ [

## FIPS 支援
](#Appendix.Oracle.Options.SSL.FIPS)
+ [

## 憑證與密碼套件的相容性
](#Appendix.Oracle.Options.SSL.CertificateCompatibility)
+ [

# 新增 SSL 選項
](Appendix.Oracle.Options.SSL.OptionGroup.md)
+ [

# 設定 SQL\$1Plus 以使用 SSL 搭配 RDS for Oracle 資料庫執行個體
](Appendix.Oracle.Options.SSL.ClientConfiguration.md)
+ [

# 使用 SSL 連線至 RDS for Oracle 資料庫執行個體
](Appendix.Oracle.Options.SSL.Connecting.md)
+ [

# 設定透過 JDBC 的 SSL 連線
](Appendix.Oracle.Options.SSL.JDBC.md)
+ [

# 使用 SSL 連線強制執行 DN 比對
](Appendix.Oracle.Options.SSL.DNMatch.md)
+ [

# 對 SSL 連線進行疑難排解
](Appendix.Oracle.Options.SSL.troubleshooting.md)

## Oracle SSL 選項的 TLS 版本
<a name="Appendix.Oracle.Options.SSL.TLS"></a>

Amazon RDS for Oracle 現已支援 Transport Layer Security (TLS) 版本 1.0 和 1.2。新增 Oracle SSL 選項時，請明確地將 `SQLNET.SSL_VERSION` 設為有效值。此選項設定允許下列值：
+ `"1.0"` – 用戶端只能使用 TLS 1.0 版連線至資料庫執行個體。若為現有的 Oracle SSL 選項，`SQLNET.SSL_VERSION` 會自動設為 `"1.0"`。您可以視需要變更此設定。
+ `"1.2"`– 用戶端只能使用 TLS 1.2 來連線至資料庫執行個體。
+ `"1.2 or 1.0"`– 用戶端可以使用 TLS 1.2 或 1.0 來連線至資料庫執行個體。

## Oracle SSL 選項的密碼套件
<a name="Appendix.Oracle.Options.SSL.CipherSuites"></a>

Amazon RDS for Oracle 支援多個 SSL 密碼套件。根據預設，Oracle SSL 選項設定為使用 `SSL_RSA_WITH_AES_256_CBC_SHA` 密碼套件。若要指定在 SSL 連線上使用不同的密碼套件，請使用 `SQLNET.CIPHER_SUITE` 選項設定。

您可以為 `SQLNET.CIPHER_SUITE` 指定多個值。如果您在資料庫執行個體之間有資料庫連結，並決定更新密碼套件，則此技術非常有用。

下表摘要說明 Oracle Database 19c 和 21c 所有版本中 RDS for Oracle 的 SSL 支援。


| 密碼套件 (SQLNET.CIPHER\$1SUITE) | TLS 版本支援 (SQLNET.SSL\$1VERSION) | FIPS 支援 | FedRAMP 合規 | 
| --- | --- | --- | --- | 
| SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA (預設) | 1.0 和 1.2 | 是 | 否 | 
| SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA256 | 1.2 | 是 | 否 | 
| SSL\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 | 1.2 | 是 | 否 | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 | 1.2 | 是 | 是 | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 | 1.2 | 是 | 是 | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384 | 1.2 | 是 | 是 | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 | 1.2 | 是 | 是 | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA | 1.2 | 是 | 是 | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA | 1.2 | 是 | 是 | 
| TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 | 1.2 | 是 | 是 | 
| TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384 | 1.2 | 是 | 是 | 

## FIPS 支援
<a name="Appendix.Oracle.Options.SSL.FIPS"></a>

RDS for Oracle 可讓您針對 140-2 使用美國聯邦資訊處理標準 (FIPS)。FIPS 140-2 是定義加密模組安全性要求的美國政府標準。您可以針對 Oracle SSL 選項，將設定 `FIPS.SSLFIPS_140` 設為 `TRUE`，來開啟 FIPS 標準。針對 SSL 設定 FIPS 140-2 時，密碼編譯程式庫會在用戶端與 RDS for Oracle 資料庫執行個體之間加密資料。

用戶端必須使用符合 FIPS 規定的密碼套件。建立連線時，用戶端和 RDS for Oracle 資料庫執行個體會協商來回傳輸訊息時所使用的密碼套件。[Oracle SSL 選項的密碼套件](#Appendix.Oracle.Options.SSL.CipherSuites) 中的資料表會顯示適用於每個 TLS 版本的 FIPS 相容 SSL 密碼套件。如需詳細資訊，請參閱 Oracle 資料庫文件中的 [Oracle 資料庫 FIPS 140-2 設定](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/dbseg/oracle-database-fips-140-settings.html#GUID-DDBEB3F9-B216-44BB-8C18-43B5E468CBBB)。

## 憑證與密碼套件的相容性
<a name="Appendix.Oracle.Options.SSL.CertificateCompatibility"></a>

RDS for Oracle 支援 RSA 和橢圓曲線數位簽章演算法 (ECDSA) 憑證。當您為資料庫執行個體設定 SSL 時，必須確保您在 `SQLNET.CIPHER_SUITE` 選項設定中指定的密碼套件與資料庫執行個體所使用的憑證類型相容。

下表顯示憑證類型與密碼套件之間的相容性：


| 憑證類型 | 相容的密碼套件 | 不相容的密碼套件 | 
| --- | --- | --- | 
| RSA 憑證 (rds-ca-2019、rds-ca-rsa2048-g1、rds-ca-rsa4096-g1) |  SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA256 SSL\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA  |  TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384  | 
| ECDSA 憑證 (rds-ca-ecc384-g1) |  TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384  |  SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA256 SSL\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA  | 

當您在 `SQLNET.CIPHER_SUITE` 選項設定中指定多個密碼套件時，請務必包含至少一個與資料庫執行個體使用的憑證類型相容的密碼套件。如果您使用的選項群組具有多個具有不同憑證類型的資料庫執行個體，請針對每個憑證類型至少包含一個密碼套件。

如果您嘗試將選項群組與一個 SSL 選項建立關聯，但其中只包含一個與資料庫執行個體的憑證類型不相容的密碼套件，則操作將會失敗，並出現指出不相容的錯誤訊息。

# 新增 SSL 選項
<a name="Appendix.Oracle.Options.SSL.OptionGroup"></a>

若要使用 SSL，您的 RDS for Oracle 資料庫執行個體必須與包含 `SSL` 選項的選項群組建立關聯。

## 主控台
<a name="Appendix.Oracle.Options.SSL.OptionGroup.Console"></a>

**將 SSL 選項新增至選項群組**

1. 建立新的選項群組，或識別現有的選項群組，以便在其中新增 `SSL` 選項。

   如需建立選項群組的相關資訊，請參閱[建立選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)。

1. 將 `SSL` 選項新增至選項群組。

   如果您只想針對 SSL 連線使用經 FIPS 驗證的密碼套件，請將選項 `FIPS.SSLFIPS_140` 設定為 `TRUE`。如需 FIPS 標準的相關資訊，請參閱 [FIPS 支援](Appendix.Oracle.Options.SSL.md#Appendix.Oracle.Options.SSL.FIPS)。

   如需將選項新增至選項群組的相關資訊，請參閱[將選項新增至選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。

1. 建立新的 RDS for Oracle 資料庫執行個體，將其與選項群組建立關聯，或修改 RDS for Oracle 資料庫執行個體，使其與選項群組建立關聯。

   如需建立資料庫執行個體的相關資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。

   如需修改資料庫執行個體的相關資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

## AWS CLI
<a name="Appendix.Oracle.Options.SSL.OptionGroup.CLI"></a>

**將 SSL 選項新增至選項群組**

1. 建立新的選項群組，或識別現有的選項群組，以便在其中新增 `SSL` 選項。

   如需建立選項群組的相關資訊，請參閱[建立選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)。

1. 將 `SSL` 選項新增至選項群組。

   指定下列選項設定：
   + `Port` – SSL 連接埠號碼
   + `VpcSecurityGroupMemberships` – 已啟用選項的 VPC 安全群組
   + `SQLNET.SSL_VERSION` – 用戶端可用來連線至資料庫執行個體的 TLS 版本

   例如下列 AWS CLI 命令可將 `SSL` 選項新增至名為 `ora-option-group` 的選項群組。  
**Example**  

   對於 Linux、macOS 或 Unix：

   ```
   aws rds add-option-to-option-group --option-group-name ora-option-group \
     --options 'OptionName=SSL,Port=2484,VpcSecurityGroupMemberships="sg-68184619",OptionSettings=[{Name=SQLNET.SSL_VERSION,Value=1.0}]'
   ```

   在 Windows 中：

   ```
   aws rds add-option-to-option-group --option-group-name ora-option-group ^
     --options 'OptionName=SSL,Port=2484,VpcSecurityGroupMemberships="sg-68184619",OptionSettings=[{Name=SQLNET.SSL_VERSION,Value=1.0}]'
   ```

1. 建立新的 RDS for Oracle 資料庫執行個體，將其與選項群組建立關聯，或修改 RDS for Oracle 資料庫執行個體，使其與選項群組建立關聯。

   如需建立資料庫執行個體的相關資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。

   如需修改資料庫執行個體的相關資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

# 設定 SQL\$1Plus 以使用 SSL 搭配 RDS for Oracle 資料庫執行個體
<a name="Appendix.Oracle.Options.SSL.ClientConfiguration"></a>

在可以連線至使用 Oracle SSL 選項的 RDS for Oracle 資料庫執行個體之前，您必須先設定 SQL\$1Plus，然後才能連線。

**注意**  
若要允許從適當的用戶端存取資料庫執行個體，請確定您的安全群組已正確設定。如需更多詳細資訊，請參閱 [使用安全群組控制存取](Overview.RDSSecurityGroups.md)。此外，這些指示僅適用於 SQL\$1Plus 和其他直接使用 Oracle 主目錄的用戶端。如需了解 JDBC 連線，請參閱 [設定透過 JDBC 的 SSL 連線](Appendix.Oracle.Options.SSL.JDBC.md)。

**設定 SQL\$1Plus 以使用 SSL 連線至 RDS for Oracle 資料庫執行個體**

1. 將 `ORACLE_HOME` 環境變數設為 Oracle 主目錄的位置。

   Oracle 主目錄的路徑取決於您的安裝。下列範例設定 `ORACLE_HOME` 環境變數。

   ```
   prompt>export ORACLE_HOME=/home/user/app/user/product/19.0.0/dbhome_1
   ```

   如需有關設定 Oracle 環境變數的資訊，請參閱 Oracle 文件中的 [SQL\$1Plus 環境變數](http://docs.oracle.com/database/121/SQPUG/ch_two.htm#SQPUG331)，以及您的作業系統適用的 Oracle 安裝指南。

1. 將 `$ORACLE_HOME/lib` 附加至 `LD_LIBRARY_PATH` 環境變數。

   下列範例設定 LD\$1LIBRARY\$1PATH 環境變數。

   ```
   prompt>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib 
   ```

1. 在 `$ORACLE_HOME/ssl_wallet` 建立 Oracle 錢包的目錄。

   下列範例建立 Oracle 錢包目錄。

   ```
   prompt>mkdir $ORACLE_HOME/ssl_wallet
   ```

1. 下載適用於所有 的憑證套件 .pem 檔案，並將檔案 AWS 區域 放在 ssl\$1wallet 目錄中。如需相關資訊，請參閱[使用 SSL/TLS 加密與資料庫執行個體或叢集的連線](UsingWithRDS.SSL.md)。

1. 在 `$ORACLE_HOME/network/admin` 目錄中，修改或建立 `tnsnames.ora` 檔案，並包含下列項目。

   ```
   net_service_name = 
     (DESCRIPTION = 
       (ADDRESS_LIST = 
         (ADDRESS = 
           (PROTOCOL = TCPS) 
           (HOST = endpoint) 
           (PORT = ssl_port_number)
         )
       )
       (CONNECT_DATA = 
         (SID = database_name)
       )
       (SECURITY = 
         (SSL_SERVER_CERT_DN = "C=US,ST=Washington,L=Seattle,O=Amazon.com,OU=RDS,CN=endpoint")
       )
     )
   ```

1. 在相同的目錄中，修改或建立 sqlnet.ora 檔案，並加入下列參數。
**注意**  
若要透過 TLS 安全連線與實體之間進行通訊，Oracle 需要擁有必要憑證的錢包以進行身分驗證。您可以使用 Oracle 的 ORAPKI 公用程式來建立並維護 Oracle 錢包，如步驟 7 所示。如需詳細資訊，請參閱 Oracle 文件中的[使用 ORAPKI 設定 Oracle 錢包](https://docs.oracle.com/cd/E92519_02/pt856pbr3/eng/pt/tsvt/task_SettingUpOracleWalletUsingORAPKI.html)。

   ```
   WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = $ORACLE_HOME/ssl_wallet))) 
   SSL_CLIENT_AUTHENTICATION = FALSE 
   SSL_VERSION = 1.0 
   SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA) 
   SSL_SERVER_DN_MATCH = ON
   ```
**注意**  
若資料庫執行個體支援，您可將 `SSL_VERSION` 設為較高的值。

1. 執行下列命令來建立 Oracle 錢包。

   ```
   prompt>orapki wallet create -wallet $ORACLE_HOME/ssl_wallet -auto_login_only
   ```

1. 使用 OS 公用程式，將 .pem 套件檔案中的每個憑證解壓縮至個別的 .pem 檔案。

1. 使用個別 `orapki` 命令將每個憑證新增至您的錢包，將 `certificate-pem-file` 取代為 .pem 檔案的絕對檔案名稱。

   ```
   prompt>orapki wallet add -wallet $ORACLE_HOME/ssl_wallet -trusted_cert -cert
         certificate-pem-file -auto_login_only
   ```

   如需詳細資訊，請參閱[輪換您的 SSL/TLS 憑證](UsingWithRDS.SSL-certificate-rotation.md)。

# 使用 SSL 連線至 RDS for Oracle 資料庫執行個體
<a name="Appendix.Oracle.Options.SSL.Connecting"></a>

依先前所述將 SQL\$1Plus 設定為使用 SSL 之後，即可採用 SSL 選項連線至 RDS for Oracle 資料庫執行個體。(選用) 您可以先匯出指向包含 tnsnames.ora 和 sqlnet.ora 檔案目錄的 `TNS_ADMIN` 值。如此將確保 SQL\$1Plus 可一直找到這些檔案。以下範例將匯出 `TNS_ADMIN` 值。

```
export TNS_ADMIN=${ORACLE_HOME}/network/admin
```

連線到資料庫執行個體。例如，您可以使用 SQL\$1Plus 和 tnsnames.ora 檔案中的 *<net\$1service\$1name>* 進行連線。

```
sqlplus mydbuser@net_service_name          
```

您也可以使用以下命令，只利用 SQL\$1Plus 連線至資料庫執行個體，而不需要用到 tnsnames.ora 檔案。

```
sqlplus 'mydbuser@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCPS)(HOST = endpoint) (PORT = ssl_port_number))(CONNECT_DATA = (SID = database_name)))'          
```

您也可以不使用 SSL 就連線至 RDS for Oracle 資料庫執行個體。例如，以下命令透過純文字連接埠來連線至資料庫執行個體，而不使用 SSL 加密。

```
sqlplus 'mydbuser@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = endpoint) (PORT = port_number))(CONNECT_DATA = (SID = database_name)))'          
```

如果您要禁止傳輸控制通訊協定 (TCP) 連接埠存取，請建立不含 IP 地址傳入的安全群組，並新增至執行個體。如此新增之後就會關閉透過 TCP 連接埠的連線，但仍允許透過 SSL 連接埠的連線 (從 SSL 選項安全群組所允許範圍內的 IP 地址指定)。

# 設定透過 JDBC 的 SSL 連線
<a name="Appendix.Oracle.Options.SSL.JDBC"></a>

若要透過 JDBC 使用 SSL 連線，您必須建立金鑰存放區、信任 Amazon RDS 根 CA 憑證，以及使用如下指定的程式碼片段。

若要建立 JKS 格式的金鑰存放區，您可以使用下列命令。如需有關建立金鑰存放區的詳細資訊，請參閱 Oracle 文件中的[建立金鑰存放區](https://docs.oracle.com/cd/E35822_01/server.740/es_admin/src/tadm_ssl_jetty_keystore.html)。如需詳細資訊，請參閱 *Java 平台，標準版本工具參考*中的 [keytool](https://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html)。

```
keytool -genkey -alias client -validity 365 -keyalg RSA -keystore clientkeystore         
```

採取下列步驟來信任 Amazon RDS 根 CA 憑證。

**信任 Amazon RDS 根 CA 憑證**

1. 下載適用於所有 AWS 區域 的憑證套件 .pem 檔案，並將檔案放置在 ssl\$1wallet 目錄中。

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

1. 使用 OS 公用程式，將 .pem 檔案中的每個憑證解壓縮至個別檔案。

1. 使用個別 `openssl` 命令將每個憑證轉換為 .der 格式，將 *certificate-pem-file* 取代為憑證 .pem 檔案的名稱 (不含 .pem 副檔名)。

   ```
   openssl x509 -outform der -in certificate-pem-file.pem -out certificate-pem-file.der                
   ```

1. 使用下列命令將每個憑證匯入金鑰存放區。

   ```
   keytool -import -alias rds-root -keystore clientkeystore.jks -file certificate-pem-file.der                
   ```

   如需更多詳細資訊，請參閱 [輪換您的 SSL/TLS 憑證](UsingWithRDS.SSL-certificate-rotation.md)。

1. 確認金鑰存放區已成功建立。

   ```
   keytool -list -v -keystore clientkeystore.jks                                            
   ```

   在提示出現時，請輸入金鑰存放區密碼。

下列程式碼範例示範如何使用 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 連線強制執行 DN 比對
<a name="Appendix.Oracle.Options.SSL.DNMatch"></a>

您可以使用 Oracle 參數 `SSL_SERVER_DN_MATCH`，以強制資料庫伺服器的辨別名稱 (DN) 比對其服務名稱。如果強制使用比對驗證，則 SSL 會確保憑證來自伺服器。如果不強制使用比對驗證，則 SSL 會執行檢查，但無論是否符合都允許連線。如果不強制使用比對，則伺服器很可能偽造其身分。

若要強制使用 DN 比對，請新增 DN 比對屬性，並使用如下指定的連線字串。

將此屬性新增至用戶端連線，以強制使用 DN 比對。

```
properties.put("oracle.net.ssl_server_dn_match", "TRUE");            
```

使用下列連線字串，即可在使用 SSL 時強制使用 DN 比對。

```
final String connectionString = String.format(
    "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=%s)(PORT=%d))" +
    "(CONNECT_DATA=(SID=%s))" +
    "(SECURITY = (SSL_SERVER_CERT_DN = 
\"C=US,ST=Washington,L=Seattle,O=Amazon.com,OU=RDS,CN=%s\")))",
    DB_SERVER_NAME, SSL_PORT, DB_SID, DB_SERVER_NAME);
```

# 對 SSL 連線進行疑難排解
<a name="Appendix.Oracle.Options.SSL.troubleshooting"></a>

您可能會查詢資料庫並收到 `ORA-28860` 錯誤。

```
ORA-28860: Fatal SSL error
28860. 00000 - "Fatal SSL error"
*Cause: An error occurred during the SSL connection to the peer. It is likely that this side sent data which the peer rejected.
*Action: Enable tracing to determine the exact cause of this error.
```

當用戶端嘗試使用伺服器不支援的 TLS 版本進行連線時，就會發生這個錯誤。若要避免此錯誤，請編輯 sqlnet.ora 並將 `SSL_VERSION` 設定為正確的 TLS 版本。如需詳細資訊，請參閱「My Oracle 支援」中的 [My Oracle 支援文件 2748438.1](https://support.oracle.com/epmos/faces/DocumentDisplay?id=2748438.1)。