Oracle 本机网络加密 - Amazon Relational Database Service

Oracle 本机网络加密

Amazon RDS 支持 Oracle 本机网络加密 (NNE)。借助于 Native Network Encryption,您可以在数据进出数据库实例时进行加密。Amazon RDS 支持所有版本的 Oracle Database 的 NNE。

详细讨论 Oracle Native Network Encryption 超出了本指南的范围,但在您确定部署解决方案前,应该了解每个算法和密钥的优缺点。有关通过 Oracle 本机网络加密提供的算法和密钥的信息,请参阅 Oracle 文档中的配置网络数据加密。有关AWS安全性的更多信息,请参阅AWS安全中心

注意

您可以使用本机网络加密或安全套接字层,但不能同时使用二者。有关更多信息,请参阅“Oracle 安全套接字层”。

NNE 选项设置

您可以在服务器和客户端上指定加密要求。例如,当数据库实例使用数据库链接连接到另一个数据库时,它可以充当客户端。您可能希望避免在服务器端强制加密。例如,您可能不希望强制所有客户端通信使用加密,因为服务器需要加密。在这种情况下,您可以使用 SQLNET.*CLIENT 选项强制在客户端上加密。

Amazon RDS 支持 NNE 选项的以下设置。

注意

当您使用逗号分隔选项设置的值时,不要在逗号后面放置空格。

选项设置 有效值 默认值 描述

SQLNET.ALLOW_WEAK_CRYPTO_CLIENTS

TRUE, FALSE

TRUE

使用非安全密码的客户端尝试连接到数据库时服务器的行为。如果为 TRUE,即使客户没有使用 2021 年 7 月 PSU 修补也可以连接。

如果设置为 FALSE,客户端只有在使用 2021 年 7 月 PSU 修补后才能连接到数据库。将 SQLNET.ALLOW_WEAK_CRYPTO_CLIENTS 设置为 FALSE 之前,确保满足以下条件:

  • 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_CRYPTO 设置为 FALSE 之前,确保满足以下条件:

  • 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 必须有一个通用的密码。

添加 NNE 选项

将 NNE 选项添加到数据库实例的一般过程如下所示:

  1. 创建新的选项组,或者复制或修改现有选项组。

  2. 将 选项添加到该选项组。

  3. 将选项组与数据库实例相关联。

当选项组处于活动状态时,NNE 就处于活动状态。

使用 AWS Management Console 将 NNE 选项添加到数据库实例
  1. 对于 Engine,请选择要使用的 Oracle 版本。NNE 在所有版本中都受支持。

  2. 对于主引擎版本,选择数据库实例的版本。

    有关更多信息,请参阅“创建选项组”。

  3. NNE 选项添加到该选项组。有关添加选项的更多信息,请参阅 将选项添加到选项组

    注意

    在添加 NNE 选项后,您无需重新启动数据库实例。只要选项组处于活动状态,NNE 就处于活动状态。

  4. 将选项组应用到新的或现有的数据库实例:

    • 对于新数据库实例,您可以在启动实例时应用选项组。有关更多信息,请参阅“创建 Amazon RDS 数据库实例”。

    • 对于现有数据库实例,您可以通过修改实例并附加新的选项组来应用选项组。在添加 NNE 选项后,您无需重新启动数据库实例。只要选项组处于活动状态,NNE 就处于活动状态。有关更多信息,请参阅 修改 Amazon RDS 数据库实例

在 sqlnet.ora 中设置 NNE 值

借助于 Oracle Native Network Encryption,您还可以在服务器端和客户端设置网络加密。客户端是用来连接到数据库实例的计算机。您可以在 slqnet.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 Native Network Encryption,请给客户端上的 sqlnet.ora 文件添加下列行:

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

当尝试连接时,先前的行会在称为 /tmp/nettrace* 的客户端上生成跟踪文件。该跟踪文件中包含关于连接的信息。有关使用 Oracle 本机网络加密时的相关连接问题的详细信息,请参阅 Oracle Database 文档中的关于协商加密和完整性

修改 NNE 选项设置

启用 NNE 后,您可以修改其设置。目前,您只能使用 AWS CLI 或 RDS API 修改 NNE 选项设置。您无法使用控制台。要了解如何使用 CLI 修改选项设置,请参阅AWS CLI。有关各项设置的更多信息,请参阅NNE 选项设置

修改 CRYPTO_CHECKSUM_* 值

如果修改 NNE 选项设置,请确保以下选项设置具有至少一个通用密码:

  • 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 设置为 SHA1 或者 MD5。这些算法不包含 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 使用 DES3DESRC4 加密方法,这些方法不安全。因此,要将 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 选项

您可以从数据库实例中删除 NNE。

要从数据库实例中删除 NNE,请执行下列操作之一:

  • 要从多个数据库实例中删除 NNE,请从其所属的选项组中删除 NNE 选项。此更改会影响使用该选项组的所有数据库实例。删除 NNE 选项后,您无需重新启动数据库实例。有关更多信息,请参阅“从选项组中删除选项”。

  • 要从单个数据库实例中删除 NNE,请修改该数据库实例,并指定另一个不包含 NNE 选项的选项组。您可以指定默认 (空) 选项组,或指定其他自定义选项组。删除 NNE 选项后,您无需重新启动数据库实例。有关更多信息,请参阅“修改 Amazon RDS 数据库实例”。