

# 将 SSL 与 Microsoft SQL Server 数据库实例结合使用
<a name="SQLServer.Concepts.General.SSL.Using"></a>

可使用安全套接字层 (SSL) 对客户端应用程序和运行 Microsoft SQL Server 的 Amazon RDS 数据库实例之间的连接进行加密。对于所有支持的 SQL Server 版本，所有 AWS 区域提供了 SSL 支持。

在您创建 SQL Server 数据库实例时，Amazon RDS 会为其创建 SSL 证书。SSL 证书会将数据库实例终端节点作为 SSL 证书的公用名 (CN) 包含在内以防止欺诈攻击。

使用 SSL 连接到 SQL Server 数据库实例有两种方法：
+ 强制所有连接使用 SSL — 这种方法对客户端是透明的，客户端不需要为使用 SSL 而执行任何操作。
**注意**  
当您将 `rds.force_ssl` 设置为 `1` 并使用 SSMS 版本 19.3、20.0 和 20.2 时，请检查以下各项：  
在 SSMS 中启用**信任服务器证书**。
将证书导入您的系统。
+ 加密特定连接 — 这种方法在特定客户端计算机上设置 SSL 连接，您必须在客户端上执行加密连接的操作。

有关 SQL Server 的传输层安全性 (TLS) 支持的信息，请参阅 [Microsoft SQL Server 的 TLS 1.2 支持](https://support.microsoft.com/en-ca/help/3135244/tls-1-2-support-for-microsoft-sql-server)。

## 强制与数据库实例的连接使用 SSL
<a name="SQLServer.Concepts.General.SSL.Forcing"></a>

您还可强制与数据库实例的所有连接使用 SSL。如果强制所有连接使用 SSL，则对客户端是透明的，客户端不需要为使用 SSL 而执行任何操作。

如果要强制使用 SSL，请使用 `rds.force_ssl` 参数。默认情况下，`rds.force_ssl` 参数设置为 `0 (off)`。将 `rds.force_ssl` 参数设置为 `1 (on)` 可强制连接使用 SSL。由于 `rds.force_ssl` 参数是静态的，因此，在更改值后，您必须重启数据库实例才能使更改生效。

**强制与数据库实例的所有连接都使用 SSL**

1. 确定附加到数据库实例的参数组：

   1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

   1. 在 Amazon RDS 控制台的右上角，选择数据库实例的AWS区域。

   1. 在导航窗格中，选择**数据库**，然后选择数据库实例的名称以显示其详细信息。

   1. 选择 **Configuration** 选项卡。在此部分中查找**参数组**。

1. 如果需要，可创建新的参数组。如果数据库实例使用默认参数组，则必须创建新的参数组。如果数据库实例使用非默认参数组，则可以选择编辑现有参数组或创建新的参数组。如果您编辑现有参数组，则更改将影响使用该参数组的所有数据库实例。

   要创建新的参数组，请按照[在 Amazon RDS 中创建数据库参数组](USER_WorkingWithParamGroups.Creating.md)中的说明执行操作。

1. 编辑新的或现有的参数组以将 `rds.force_ssl` 参数设置为 `true`。要编辑参数组，请按照[在 Amazon RDS 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)中的说明执行操作。

1. 如果您创建了一个新的参数组，可修改数据库实例以附加该新参数组。修改数据库实例的 **DB Parameter Group** 设置。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。

1. 重启数据库实例。有关更多信息，请参阅“[重启数据库实例](USER_RebootInstance.md)”。

## 加密特定连接
<a name="SQLServer.Concepts.General.SSL.Client"></a>

您可以强制与数据库实例的所有连接使用 SSL，也可以仅加密来自特定客户端计算机的连接。要在特定客户端中使用 SSL，您必须获取客户端计算机的证书、在客户端计算机中导入证书，然后加密来自该客户端计算机的连接。

**注意**  
在 2014 年 8 月 5 日之后创建的所有 SQL Server 实例都在 SSL 证书的公用名 (CN) 字段中使用数据库实例终端节点。在 2014 年 8 月 5 日之前，SSL 证书验证不可用于基于 VPC 的 SQL Server 实例。如果您具有在 2014 年 8 月 5 日之前创建的基于 VPC 的 SQL Server 数据库实例，而且要使用 SSL 证书验证并确保实例终端节点作为该数据库实例 SSL 证书的 CN 包括在内，请重命名该实例。当您重命名数据库实例时，新证书会进行部署，并且实例会重启以启用新证书。

### 获取客户端计算机的证书
<a name="SQLServer.Concepts.General.SSL.Certificates"></a>

要对从客户端计算机到运行 Microsoft SQL Server 的 Amazon RDS 数据库实例的连接进行加密，您需要客户端计算机上的证书。

要获取该证书，请将该证书下载到客户端计算机。您可以下载适用于所有区域的根证书。您也可以下载同时包含旧的和新的根证书的证书捆绑包。此外，您还可以下载特定于区域的中间证书。有关下载证书的更多信息，请参阅[使用 SSL/TLS 加密与数据库实例或集群的连接](UsingWithRDS.SSL.md)。

下载适当的证书后，使用以下部分中的过程将该证书导入 Microsoft Windows 操作系统。

### 将证书导入客户端计算机
<a name="SQLServer.Concepts.General.SSL.Importing"></a>

您可以使用以下过程将证书导入客户端计算机上的 Microsoft Windows 操作系统。

**将证书导入 Windows 操作系统：**

1. 在 **Start (开始)** 菜单上的搜索框中，键入 **Run**，然后按 **Enter**。

1. 在 **Open (打开)** 框中，键入 **MMC**，然后选择 **OK (确定)**。

1. 在 MMC 控制台中的 **File** 菜单上，选择 **Add/Remove Snap-in**。

1. 在 **Add or Remove Snap-ins (添加或删除管理单元)** 对话框中，对于 **Available snap-ins (可用管理单元)**，选择 **Certificates**，然后选择 **Add (添加)**。

1. 在 **Certificates snap-in** 对话框中，选择 **Computer account**，然后选择 **Next**。

1. 在 **Select computer** 对话框中，选择 **Finish**。

1. 在 **Add or Remove Snap-ins** 对话框中，选择 **OK**。

1. 在 MMC 控制台中，展开 **Certificates**，打开 **Trusted Root Certification Authorities** 的上下文 (右键单击) 菜单，选择 **All Tasks**，然后选择 **Import**。

1. 在证书导入向导的第一页上，选择 **Next**。

1. 在证书导入向导的第二页上，选择 **Browse**。在浏览窗口中，将文件类型更改为 **All files (\$1.\$1) (所有文件 (\$1.\$1))**，因为 .pem 不是标准证书扩展名。找到您之前下载的 .pem 文件。
**注意**  
从 SQL Server Management Studio（SSMS）等 Windows 客户端进行连接时，我们建议使用 PKCS \$17 (.p7b) 证书格式，而不是 global-bundle.pem 文件。.p7b 格式可确保将完整的证书链 [包括根证书颁发机构和中间证书颁发机构（CA）] 正确导入到 Windows 证书存储中。这样可以防止在启用强制加密时可能发生的连接故障，因为 .pem 导入可能无法正确安装完整的链。

1. 选择 **Open** 以选择证书文件，然后选择 **Next**。

1. 在证书导入向导的第三页上，选择 **Next**。

1. 在证书导入向导的第四页上，选择 **Finish**。这将显示一个指示导入已成功的对话框。

1. 在 MMC 控制台中，展开 **Certificates**，再展开 **Trusted Root Certification Authorities**，然后选择 **Certificates**。找到证书以确认其存在，如此处所示。  
![\[在 MMC 控制台的导航窗格中，从“控制台根节点”、“证书（本地证书）”和“受信任的根证书颁发机构”向下钻取，选择“证书”文件夹。在主页中，选择所需的 CA 证书。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/rds_sql_ssl_cert.png)

### 对与运行 Microsoft SQL Server 的 Amazon RDS 数据库实例的连接进行加密
<a name="SQLServer.Concepts.General.SSL.Encrypting"></a>

将证书导入客户端计算机后，您可以对从客户端计算机到运行 Microsoft SQL Server 的 Amazon RDS 数据库实例的连接进行加密。

对于 SQL Server Management Studio，使用以下过程。有关 SQL Server Management Studio 的更多信息，请参阅[使用 SQL Server Management Studio](http://msdn.microsoft.com/en-us/library/ms174173.aspx)。

**对来自 SQL Server Management Studio 的连接进行加密**

1. 启动 SQL Server Management Studio。

1. 为 **Connect to server ** 键入服务器信息、登录用户名和密码。

1. 选择 **Options**。

1. 选择 **Encrypt connection**。

1. 选择 **Connect**。

1. 通过运行以下查询确认连接已加密。验证查询为 `true` 返回 `encrypt_option`。

   ```
   select ENCRYPT_OPTION from SYS.DM_EXEC_CONNECTIONS where SESSION_ID = @@SPID
   ```

对于任何其他 SQL 客户端，请使用以下过程。

**对来自其他 SQL 客户端的连接进行加密**

1. 向连接字符串追加 `encrypt=true`。在 GUI 工具的连接页上，此字符串可能以选项或属性形式提供。
**注意**  
要为使用 JDBC 进行连接的客户端启用 SSL 加密，您可能需要将 Amazon RDS SQL 证书添加到 Java CA 证书 (cacerts) 存储。可通过使用 [keytool](http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/keytool.html) 实用程序执行该操作。

1. 通过运行以下查询确认连接已加密。验证查询为 `true` 返回 `encrypt_option`。

   ```
   select ENCRYPT_OPTION from SYS.DM_EXEC_CONNECTIONS where SESSION_ID = @@SPID
   ```