

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

# Oracle 原生網路加密
<a name="Appendix.Oracle.Options.NetworkEncryption"></a>

Amazon RDS 支援 Oracle 原生網路加密 (NNE)。使用 `NATIVE_NETWORK_ENCRYPTION` 選項，您可以在資料移入和移出資料庫執行個體時加密資料。Amazon RDS 可支援 Oracle 資料庫所有版本的 NNE。

Oracle 原生網路加密的詳細討論超出本指南的範圍，但是在決定要使用哪個解決方案進行部署之前，您應該瞭解每一個演算法和金鑰的優缺點。如需可透過 Oracle 原生網路加密使用之演算法和金鑰的相關資訊，請參閱 Oracle 文件中的[配置網路資料加密](http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/11g/r2/prod/security/network_encrypt/ntwrkencrypt.htm)。如需 AWS 安全性的詳細資訊，請造訪 [AWS 安全中心](https://aws.amazon.com/security)。

**注意**  
您可以使用原生網路加密或 Secure Sockets Layer，但不能同時使用兩者。如需更多詳細資訊，請參閱 [Oracle Secure Sockets Layer](Appendix.Oracle.Options.SSL.md)。

**Topics**
+ [

# NATIVE\$1NETWORK\$1ENCRYPTION 選項設定
](Oracle.Options.NNE.Options.md)
+ [

# 新增 NATIVE\$1NETWORK\$1ENCRYPTION 選項
](Oracle.Options.NNE.Add.md)
+ [

# 在 sqlnet.ora 中設定 NNE 值
](Oracle.Options.NNE.Using.md)
+ [

# 修改 NATIVE\$1NETWORK\$1ENCRYPTION 選項設定
](Oracle.Options.NNE.ModifySettings.md)
+ [

# 移除 NATIVE\$1NETWORK\$1ENCRYPTION 選項
](Oracle.Options.NNE.Remove.md)

# NATIVE\$1NETWORK\$1ENCRYPTION 選項設定
<a name="Oracle.Options.NNE.Options"></a>

您可以同時在伺服器和用戶端上指定加密需求。例如，當資料庫執行個體使用資料庫連結連線到另一個資料庫時，資料庫執行個體可以充當用戶端。您可能想要避免在伺服器端強制加密。例如，您可能不希望因為伺服器要求而強制所有用戶端通訊使用加密。在這種情況下，您可以使用 `SQLNET.*CLIENT` 選項，強制在用戶端上執行加密。

Amazon RDS 支援 `NATIVE_NETWORK_ENCRYPTION` 選項的下列設定。

**注意**  
當您使用逗號區隔選項設定的值時，請不要在逗號後面加上空格。


****  

| 選項設定 | 有效值 | 預設值 | Description | 
| --- | --- | --- | --- | 
|  `SQLNET.ALLOW_WEAK_CRYPTO_CLIENTS`  |  `TRUE`, `FALSE`  |  `TRUE`  |  使用非安全加密的用戶端嘗試連接至資料庫時伺服器的行為。如果為 `TRUE`，即使沒有使用 2021 年 7 月 PSU 進行修補，用戶端也可以連接。 如果設定為 `FALSE`，則僅當用戶端使用 2021 年 7 月 PSU 進行修補時才能連接至資料庫。在設定 `SQLNET.ALLOW_WEAK_CRYPTO_CLIENTS` 為 `FALSE` 之前，請確保滿足以下條件： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/Oracle.Options.NNE.Options.html)  | 
|  `SQLNET.ALLOW_WEAK_CRYPTO`  |  `TRUE`, `FALSE`  |  `TRUE`  |  使用非安全加密的用戶端嘗試連接至資料庫時伺服器的行為。以下加密方式被視為不安全： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/Oracle.Options.NNE.Options.html) 如果設定為 `TRUE`，用戶端可在使用上述非加密方式時進行連線。 如果設定為 `FALSE`，當用戶端使用上述非安全加密方式時，資料庫會阻止用戶端連線。在設定 `SQLNET.ALLOW_WEAK_CRYPTO` 為 `FALSE` 之前，請確保滿足以下條件： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/Oracle.Options.NNE.Options.html)  | 
|  `SQLNET.CRYPTO_CHECKSUM_CLIENT`  |  `Accepted`, `Rejected`, `Requested`, `Required`   |  `Requested`  |  資料庫執行個體連線至用戶端或充當用戶端的伺服器時的資料完整性行為。當資料庫執行個體使用資料庫連結時，它會充當用戶端。 `Requested` 表示用戶端不需要資料庫執行個體執行檢查總和。  | 
|  `SQLNET.CRYPTO_CHECKSUM_SERVER`  |  `Accepted`, `Rejected`, `Requested`, `Required`   |  `Requested`  |  用戶端或做為用戶端的伺服器連線至資料庫執行個體時的資料完整性。當資料庫執行個體使用資料庫連結時，它會充當用戶端。 `Requested` 表示資料庫執行個體不需要用戶端執行檢查總和。  | 
|  `SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT`  |  `SHA256`, `SHA384`, `SHA512`, `SHA1`, `MD5`  |  `SHA256`, `SHA384`, `SHA512`  |  總和檢查演算法的清單。 您可以指定一值或逗號分隔的值清單。如果您使用逗號，請不要在逗號後面插入空格；否則，您會收到 `InvalidParameterValue` 錯誤。 此參數和 `SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER ` 必須有一個共同的密碼。  | 
|  `SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER`  |  `SHA256`, `SHA384`, `SHA512`, `SHA1`, `MD5`  |  `SHA256`, `SHA384`, `SHA512`, `SHA1`, `MD5`  |  總和檢查演算法的清單。 您可以指定一值或逗號分隔的值清單。如果您使用逗號，請不要在逗號後面插入空格；否則，您會收到 `InvalidParameterValue` 錯誤。 此參數和 `SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT` 必須有一個共同的密碼。  | 
|  `SQLNET.ENCRYPTION_CLIENT`  |  `Accepted`, `Rejected`, `Requested`, `Required`   |  `Requested`  |  用戶端或充當用戶端的伺服器連線至資料庫執行個體時用戶端的加密行為。當資料庫執行個體使用資料庫連結時，它會充當用戶端。 `Requested` 表示用戶端不需要加密來自伺服器的流量。  | 
|  `SQLNET.ENCRYPTION_SERVER`  |  `Accepted`, `Rejected`, `Requested`, `Required`   |  `Requested`  |  用戶端或充當用戶端的伺服器連線至資料庫執行個體時伺服器的加密行為。當資料庫執行個體使用資料庫連結時，它會充當用戶端。 `Requested` 表示資料庫執行個體不需要將來自用戶端的流量進行加密。  | 
|  `SQLNET.ENCRYPTION_TYPES_CLIENT`  |  `RC4_256`, `AES256`, `AES192`, `3DES168`, `RC4_128`, `AES128`, `3DES112`, `RC4_56`, `DES`, `RC4_40`, `DES40`  |  `RC4_256`, `AES256`, `AES192`, `3DES168`, `RC4_128`, `AES128`, `3DES112`, `RC4_56`, `DES`, `RC4_40`, `DES40`  |  用戶端所使用之加密演算法的清單。用戶端會依序嘗試每一種演算法來試圖解密伺服器輸入，直到演算法成功或達到清單結尾為止。 Amazon RDS 會使用來自 Oracle 的下列預設清單。RDS 會從 `RC4_256` 開始，並依序向下處理清單。您可以變更順序或限制資料庫執行個體將接受的演算法。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/Oracle.Options.NNE.Options.html) 您可以指定一值或逗號分隔的值清單。如果您使用逗號，請不要在逗號後面插入空格；否則，您會收到 `InvalidParameterValue` 錯誤。 此參數和 `SQLNET.SQLNET.ENCRYPTION_TYPES_SERVER` 必須有一個共同的密碼。  | 
|  `SQLNET.ENCRYPTION_TYPES_SERVER`  |  `RC4_256`, `AES256`, `AES192`, `3DES168`, `RC4_128`, `AES128`, `3DES112`, `RC4_56`, `DES`, `RC4_40`, `DES40`  |  `RC4_256`, `AES256`, `AES192`, `3DES168`, `RC4_128`, `AES128`, `3DES112`, `RC4_56`, `DES`, `RC4_40`, `DES40`  |  資料庫執行個體所使用之加密演算法的清單。資料庫執行個體會依序使用每一個演算法，以嘗試解密用戶端輸入，直到演算法成功或直到達到清單結尾。 Amazon RDS 會使用來自 Oracle 的下列預設清單。您可以變更順序或限制用戶端將接受的演算法。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/Oracle.Options.NNE.Options.html) 您可以指定一值或逗號分隔的值清單。如果您使用逗號，請不要在逗號後面插入空格；否則，您會收到 `InvalidParameterValue` 錯誤。 此參數和 `SQLNET.SQLNET.ENCRYPTION_TYPES_SERVER` 必須有一個共同的密碼。  | 

# 新增 NATIVE\$1NETWORK\$1ENCRYPTION 選項
<a name="Oracle.Options.NNE.Add"></a>

將 `NATIVE_NETWORK_ENCRYPTION` 選項新增至資料庫執行個體的一般程序如下：

1. 建立新的選項群組，或是複製或修改現有選項群組。

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

1. 將選項群組與資料庫執行個體建立關聯。

當選項群組為作用中時，NNE 就會是作用中的狀態。

**使用 將 NATIVE\$1NETWORK\$1ENCRYPTION 選項新增至資料庫執行個體 AWS 管理主控台**

1. 針對 **Engine (引擎)**，選擇您想要使用的 Oracle 版本。所有版本都支援 NNE。

1. 針對 **Major engine version (主要引擎版本)**，請選擇您資料庫執行個體的版本。

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

1. 將 **NATIVE\$1NETWORK\$1ENCRYPTION** 選項新增至選項群組。如需新增選項的詳細資訊，請參閱[將選項新增至選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。
**注意**  
新增 **NATIVE\$1NETWORK\$1ENCRYPTION** 選項後，您不需要重新啟動資料庫執行個體。只要選項群組為作用中，NNE 就會是作用中的狀態。

1. 將選項群組套用至新的或現有的資料庫執行個體：
   + 針對新的資料庫執行個體，您會在啟動執行個體時套用選項群組。如需更多詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。
   + 針對現有的資料庫執行個體，您可以透過修改執行個體並附加新的選項群組來套用選項群組。新增 **NATIVE\$1NETWORK\$1ENCRYPTION** 選項後，您不需要重新啟動資料庫執行個體。只要選項群組為作用中，NNE 就會是作用中的狀態。如需詳細資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

# 在 sqlnet.ora 中設定 NNE 值
<a name="Oracle.Options.NNE.Using"></a>

您可以透過 Oracle 原生網路加密，在伺服器端和用戶端設定網路加密。用戶端是用來連線至資料庫執行個體的電腦。您可以在 sqlnet.ora 中指定下列用戶端設定：
+ `SQLNET.ALLOW_WEAK_CRYPTO`
+ `SQLNET.ALLOW_WEAK_CRYPTO_CLIENTS`
+ `SQLNET.CRYPTO_CHECKSUM_CLIENT`
+ `SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT`
+ `SQLNET.ENCRYPTION_CLIENT`
+ `SQLNET.ENCRYPTION_TYPES_CLIENT`

如需相關資訊，請參閱 Oracle 文件中的[配置 Oracle 伺服器和用戶端的網路資料加密和完整性](http://docs.oracle.com/cd/E11882_01/network.112/e40393/asoconfg.htm)。

有時，資料庫執行個體會拒絕來自應用程式的連線請求。例如，當用戶端和伺服器上的加密演算法不相符時，可能會出現拒絕情況。若要測試 Oracle 原生網路加密，請將下列幾行新增至用戶端上的 sqlnet.ora 檔案：

```
DIAG_ADR_ENABLED=off
TRACE_DIRECTORY_CLIENT=/tmp
TRACE_FILE_CLIENT=nettrace
TRACE_LEVEL_CLIENT=16
```

嘗試連線時，上述幾行會在用戶端上產生一個稱為 `/tmp/nettrace*` 的追蹤檔。追蹤檔案會包含連線的相關資訊。如需您在使用 Oracle 原生網路加密時所發生之連線相關問題的詳細資訊，請參閱 Oracle 資料庫文件中的[關於溝通加密和完整性](http://docs.oracle.com/cd/E11882_01/network.112/e40393/asoconfg.htm#autoId12)。

# 修改 NATIVE\$1NETWORK\$1ENCRYPTION 選項設定
<a name="Oracle.Options.NNE.ModifySettings"></a>

啟用 `NATIVE_NETWORK_ENCRYPTION` 選項後，您可以修改其設定。目前，您只能使用 AWS CLI 或 RDS API 修改`NATIVE_NETWORK_ENCRYPTION`選項設定。您無法使用主控台。下列範例會修改選項中的兩項設定。

```
aws rds add-option-to-option-group \
    --option-group-name my-option-group \
    --options "OptionName=NATIVE_NETWORK_ENCRYPTION,OptionSettings=[{Name=SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER,Value=SHA256},{Name=SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER,Value=SHA256}]" \
    --apply-immediately
```

若要了解如何使用 CLI 修改選項設定，請參閱 [AWS CLI](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption.CLI)。如需每項設定的詳細資訊，請參閱[NATIVE\$1NETWORK\$1ENCRYPTION 選項設定](Oracle.Options.NNE.Options.md)。

**Topics**
+ [

## 修改 CRYPTO\$1CHECKSUM\$1\$1 值
](#Oracle.Options.NNE.ModifySettings.checksum)
+ [

## 修改 ALLOW\$1WEAK\$1CRYPTO\$1 設定
](#Oracle.Options.NNE.ModifySettings.encryption)

## 修改 CRYPTO\$1CHECKSUM\$1\$1 值
<a name="Oracle.Options.NNE.ModifySettings.checksum"></a>

如果您修改 **NATIVE\$1NETWORK\$1ENCRYPTION** 選項設定，請確定下列選項設定至少有一個共同的密碼：
+ `SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER`
+ `SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT`

下列範例顯示您可以修改 `SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER` 的情況。此組態有效，因為 `CRYPTO_CHECKSUM_TYPES_CLIENT` 和 `CRYPTO_CHECKSUM_TYPES_SERVER` 兩者皆使用 `SHA256`。


| 選項設定 | 修改前的值 | 修改後的值 | 
| --- | --- | --- | 
|  `SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT`  |  `SHA256`, `SHA384`, `SHA512`  |  未變更  | 
|  `SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER`  |  `SHA256`, `SHA384`, `SHA512`, `SHA1`, `MD5`  | SHA1,MD5,SHA256 | 

另一個範例，假設您想要將 `SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER` 從其預設設定修改為 `SHA1,MD5`。在這種情況下，請確認您將 `SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT` 設定為 `SHA1` 或 `MD5`。這些演算法不會包含在 `SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT` 的預設值中。

## 修改 ALLOW\$1WEAK\$1CRYPTO\$1 設定
<a name="Oracle.Options.NNE.ModifySettings.encryption"></a>

要將 `SQLNET.ALLOW_WEAK_CRYPTO*` 選項從預設值設定為 `FALSE`，請確保符合下列條件：
+ `SQLNET.ENCRYPTION_TYPES_SERVER` 和 `SQLNET.ENCRYPTION_TYPES_CLIENT` 具有一個相符的安全加密方法。如果方法不是 `DES`、`3DES` 或 `RC4` (所有金鑰長度)，則該方法被認為是安全的。
+ `SQLNET.CHECKSUM_TYPES_SERVER` 和 `SQLNET.CHECKSUM_TYPES_CLIENT` 具有一個相符的檢查總和方法。如果方法不是 `MD5`，則該方法被認為是安全的。
+ 用戶端已使用 2021 年 7 月 PSU 修補。如果用戶端未修補，則用戶端會失去連線並接收到 `ORA-12269` 錯誤。

下列範例顯示範例 NNE 設定。假定將 `SQLNET.ENCRYPTION_TYPES_SERVER` 和 `SQLNET.ENCRYPTION_TYPES_CLIENT` 設定為 FALSE，從而阻止非安全連線。檢查總和選項設定滿足先決條件，因為它們都具有 `SHA256`。但是，`SQLNET.ENCRYPTION_TYPES_CLIENT` 和 `SQLNET.ENCRYPTION_TYPES_SERVER` 使用 `DES`、`3DES` 以及 `RC4` 加密方法，這些方法是不安全的。因此，要將 `SQLNET.ALLOW_WEAK_CRYPTO*` 選項設定為 `FALSE`，請先將 `SQLNET.ENCRYPTION_TYPES_SERVER` 和 `SQLNET.ENCRYPTION_TYPES_CLIENT` 設為安全加密方法，例如 `AES256`。


| 選項設定 | 值 | 
| --- | --- | 
|  `SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT`  |  `SHA256`, `SHA384`, `SHA512`  | 
|  `SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER`  | SHA1,MD5,SHA256 | 
|  `SQLNET.ENCRYPTION_TYPES_CLIENT`  |  `RC4_256`, `3DES168`, `DES40`  | 
|  `SQLNET.ENCRYPTION_TYPES_SERVER`  |  `RC4_256`, `3DES168`, `DES40`  | 

# 移除 NATIVE\$1NETWORK\$1ENCRYPTION 選項
<a name="Oracle.Options.NNE.Remove"></a>

您可以從資料庫執行個體中移除 NNE。

若要從資料庫執行個體中移除 `NATIVE_NETWORK_ENCRYPTION` 選項，請執行下列其中一個動作：
+ 若要從多個資料庫執行個體中移除選項，請從所屬的選項群組中移除 `NATIVE_NETWORK_ENCRYPTION` 選項。此變更會影響使用選項群組的所有資料庫執行個體。移除 `NATIVE_NETWORK_ENCRYPTION` 選項之後，您不需要重新啟動資料庫執行個體。如需詳細資訊，請參閱 [從選項群組移除選項](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption)。
+ 若要從單一資料庫執行個體中移除選項，請修改資料庫執行個體，並指定不含 `NATIVE_NETWORK_ENCRYPTION` 選項的不同選項群組。您可以指定預設的 (空白) 選項群組或不同的自訂選項群組。移除 `NATIVE_NETWORK_ENCRYPTION` 選項之後，就不需要重新啟動資料庫執行個體。如需詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。