Oracle 原生網路加密 - Amazon Relational Database Service

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

Oracle 原生網路加密

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

Oracle 原生網路加密的詳細討論超出本指南的範圍,但是在決定要使用哪個解決方案進行部署之前,您應該瞭解每一個演算法和金鑰的優缺點。如需可透過 Oracle 原生網路加密使用之演算法和金鑰的相關資訊,請參閱 Oracle 文件中的配置網路資料加密。如需 AWS 安全性的詳細資訊,請造訪 AWS 安全中心

注意

您可以使用原生網路加密或 Secure Sockets Layer,但不能同時使用兩者。如需詳細資訊,請參閱 Oracle Secure Sockets Layer

原生網路加密選項設定

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

Amazon RDS 支持該NATIVE_NETWORK_ENCRYPTION選項的以下設置。

注意

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

選項設定 有效值 預設值 描述

SQLNET.ALLOW_WEAK_CRYPTO_CLIENTS

TRUE, FALSE

TRUE

使用非安全加密的用戶端嘗試連接至資料庫時伺服器的行為。如果為 TRUE,即使沒有使用 2021 年 7 月 PSU 進行修補,用戶端也可以連接。

如果設定為 FALSE,則僅當用戶端使用 2021 年 7 月 PSU 進行修補時才能連接至資料庫。在設定 SQLNET.ALLOW_WEAK_CRYPTO_CLIENTSFALSE 之前,請確保滿足以下條件:

  • SQLNET.ENCRYPTION_TYPES_SERVERSQLNET.ENCRYPTION_TYPES_CLIENT 具有一個相符的加密方法,但該方法不是 DES3DESRC4 (所有金鑰長度)。

  • SQLNET.CHECKSUM_TYPES_SERVERSQLNET.CHECKSUM_TYPES_CLIENT 具有一個相符的檢查總和方法,但該方法不是 MD5

  • 用戶端已使用 2021 年 7 月 PSU 修補。如果用戶端未修補,則用戶端會失去連線並接收到 ORA-12269 錯誤。

SQLNET.ALLOW_WEAK_CRYPTO

TRUE, FALSE

TRUE

使用非安全加密的用戶端嘗試連接至資料庫時伺服器的行為。以下加密方式被視為不安全:

  • DES 加密方法 (所有金鑰長度)

  • 3DES 加密方法 (所有金鑰長度)

  • RC4 加密方法 (所有金鑰長度)

  • MD5 檢查總和方法

如果設定為 TRUE,用戶端可在使用上述非加密方式時進行連線。

如果設定為 FALSE,當用戶端使用上述非安全加密方式時,資料庫會阻止用戶端連線。在設定 SQLNET.ALLOW_WEAK_CRYPTOFALSE 之前,請確保滿足以下條件:

  • SQLNET.ENCRYPTION_TYPES_SERVERSQLNET.ENCRYPTION_TYPES_CLIENT 具有一個相符的加密方法,但該方法不是 DES3DESRC4 (所有金鑰長度)。

  • SQLNET.CHECKSUM_TYPES_SERVERSQLNET.CHECKSUM_TYPES_CLIENT 具有一個相符的檢查總和方法,但該方法不是 MD5

  • 用戶端已使用 2021 年 7 月 PSU 修補。如果用戶端未修補,則用戶端會失去連線並接收到 ORA-12269 錯誤。

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 開始,並依序向下處理清單。您可以變更順序或限制資料庫執行個體將接受的演算法。

  1. RC4_256:RSA RC4 (256 位元金鑰大小)

  2. AES256:AES (256 位元金鑰大小)

  3. AES192:AES (192 位元金鑰大小)

  4. 3DES168:3 金鑰三重 DES (112 位元有效金鑰大小)

  5. RC4_128:RSA RC4 (128 位元金鑰大小)

  6. AES128:AES (128 位元金鑰大小)

  7. 3DES112:2 金鑰三重 DES (80 位元有效金鑰大小)

  8. RC4_56:RSA RC4 (56 位元金鑰大小)

  9. DES:標準 DES (56 位元金鑰大小)

  10. RC4_40:RSA RC4 (40 位元金鑰大小)

  11. DES40:DES40 (40 位元金鑰大小)

您可以指定一值或逗號分隔的值清單。如果您使用逗號,請不要在逗號後面插入空格;否則,您會收到 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 的下列預設清單。您可以變更順序或限制用戶端將接受的演算法。

  1. RC4_256:RSA RC4 (256 位元金鑰大小)

  2. AES256:AES (256 位元金鑰大小)

  3. AES192:AES (192 位元金鑰大小)

  4. 3DES168:3 金鑰三重 DES (112 位元有效金鑰大小)

  5. RC4_128:RSA RC4 (128 位元金鑰大小)

  6. AES128:AES (128 位元金鑰大小)

  7. 3DES112:2 金鑰三重 DES (80 位元有效金鑰大小)

  8. RC4_56:RSA RC4 (56 位元金鑰大小)

  9. DES:標準 DES (56 位元金鑰大小)

  10. RC4_40:RSA RC4 (40 位元金鑰大小)

  11. DES40:DES40 (40 位元金鑰大小)

您可以指定一值或逗號分隔的值清單。如果您使用逗號,請不要在逗號後面插入空格;否則,您會收到 InvalidParameterValue 錯誤。

此參數和 SQLNET.SQLNET.ENCRYPTION_TYPES_SERVER 必須有一個共同的密碼。

新增原生網路加密選項

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

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

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

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

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

若要使用 [新增網路加密] 選項至資料庫執行個體 AWS Management Console
  1. 針對 Engine (引擎),選擇您想要使用的 Oracle 版本。所有版本都支援 NNE。

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

    如需詳細資訊,請參閱 建立選項群組

  3. 將「網路加密」選項新增至選項群組。如需新增選項的詳細資訊,請參閱將選項新增至選項群組

    注意

    新增 NATIVE_NETWORK_COMPARY 選項之後,您不需要重新啟動資料庫執行個體。只要選項群組為作用中,NNE 就會是作用中的狀態。

  4. 將選項群組套用至新的或現有的資料庫執行個體:

    • 針對新的資料庫執行個體,您會在啟動執行個體時套用選項群組。如需更多詳細資訊,請參閱 建立 Amazon RDS 資料庫執行個體

    • 針對現有的資料庫執行個體,您可以透過修改執行個體並附加新的選項群組來套用選項群組。新增 NATIVE_NETWORK_ 加密選項後,您不需要重新啟動資料庫執行個體。只要選項群組為作用中,NNE 就會是作用中的狀態。如需詳細資訊,請參閱 修改 Amazon RDS 資料庫執行個體

在 sqlnet.ora 中設定 NNE 值

您可以透過 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 伺服器和用戶端的網路資料加密和完整性

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

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

嘗試連線時,上述幾行會在用戶端上產生一個稱為 /tmp/nettrace* 的追蹤檔。追蹤檔案會包含連線的相關資訊。如需您在使用 Oracle 原生網路加密時所發生之連線相關問題的詳細資訊,請參閱 Oracle 資料庫文件中的關於溝通加密和完整性

修改原生網路加密選項設定

啟用 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。如需每項設定的詳細資訊,請參閱原生網路加密選項設定

修改 CRYPTO_CHECKSUM_* 值

如果您修改 NATIVE_NETWORK_COMPARY 選項設定,請確定下列選項設定至少具有一個通用密碼

  • SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER

  • SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT

下列範例顯示您可以修改 SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER 的情況。此組態有效,因為 CRYPTO_CHECKSUM_TYPES_CLIENTCRYPTO_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 設定為 SHA1MD5。這些演算法不會包含在 SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT 的預設值中。

修改 ALLOW_WEAK_CRYPTO* 設定

要將 SQLNET.ALLOW_WEAK_CRYPTO* 選項從預設值設定為 FALSE,請確保符合下列條件:

  • SQLNET.ENCRYPTION_TYPES_SERVERSQLNET.ENCRYPTION_TYPES_CLIENT 具有一個相符的安全加密方法。如果方法不是 DES3DESRC4 (所有金鑰長度),則該方法被認為是安全的。

  • SQLNET.CHECKSUM_TYPES_SERVERSQLNET.CHECKSUM_TYPES_CLIENT 具有一個相符的檢查總和方法。如果方法不是 MD5,則該方法被認為是安全的。

  • 用戶端已使用 2021 年 7 月 PSU 修補。如果用戶端未修補,則用戶端會失去連線並接收到 ORA-12269 錯誤。

下列範例顯示範例 NNE 設定。假定將 SQLNET.ENCRYPTION_TYPES_SERVERSQLNET.ENCRYPTION_TYPES_CLIENT 設定為 FALSE,從而阻止非安全連線。檢查總和選項設定滿足先決條件,因為它們都具有 SHA256。但是,SQLNET.ENCRYPTION_TYPES_CLIENTSQLNET.ENCRYPTION_TYPES_SERVER 使用 DES3DES 以及 RC4 加密方法,這些方法是不安全的。因此,要將 SQLNET.ALLOW_WEAK_CRYPTO* 選項設定為 FALSE,請先將 SQLNET.ENCRYPTION_TYPES_SERVERSQLNET.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

移除原生網路加密選項

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

若要從資料庫執行個體中移除 NATIVE_NETWORK_ENCRYPTION 選項,請執行下列其中一個動作:

  • 若要從多個資料庫執行個體移除NATIVE_NETWORK_ENCRYPTION選項,請從它們所屬的選項群組中移除該選項。此變更會影響使用選項群組的所有資料庫執行個體。移除NATIVE_NETWORK_ENCRYPTION選項後,您不需要重新啟動資料庫執行個體。如需詳細資訊,請參閱 從選項群組移除選項

  • 若要從單一資料庫執行個體移除選項,請修改資料庫執行個體,並指定不包含該選項的其他選NATIVE_NETWORK_ENCRYPTION項群組。您可以指定預設的 (空白) 選項群組或不同的自訂選項群組。移除 NATIVE_NETWORK_ENCRYPTION 選項之後,就不需要重新啟動資料庫執行個體。如需更多詳細資訊,請參閱 修改 Amazon RDS 資料庫執行個體