

# Oracle 安全套接字层
<a name="Appendix.Oracle.Options.SSL"></a>

要为 RDS for Oracle 数据库实例启用 SSL 加密，请向与数据库实例关联的选项组添加 Oracle SSL 选项。根据 Oracle 的要求，Amazon RDS 使用另一个端口连接 SSL。此方法允许数据库实例与 SQL\$1Plus 之间能够同时进行明文通信和 SSL 加密通信。例如，您可以使用用于明文通信的端口与 VPC 内的其他资源通信，同时使用用于 SSL 加密通信的端口与 VPC 外部的资源通信。

**注意**  
您可以在同一 RDS for Oracle 数据库实例上使用 SSL 或原生网络加密（NNE），但不能同时使用两者。如果您使用 SSL 加密，则必须禁用任何其他连接加密。有关更多信息，请参阅 [Oracle 本机网络加密](Appendix.Oracle.Options.NetworkEncryption.md)。

SSL/TLS 和 NNE 不再是 Oracle 高级安全的一部分。在 RDS for Oracle 中，您可以对以下数据库版本的所有许可版本使用 SSL 加密：
+ Oracle Database 21c (21.0.0)
+ Oracle Database 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 支持传输层安全性 (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 选项相关联，操作将失败，并显示一条错误消息，指出不兼容。