将 SSL 与 Microsoft SQL Server 数据库实例结合使用 - Amazon Relational Database Service

将 SSL 与 Microsoft SQL Server 数据库实例结合使用

可使用安全套接字层 (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 支持

强制与数据库实例的连接使用 SSL

您还可强制与数据库实例的所有连接使用 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 Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

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

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

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

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

    要创建新的参数组,请按照在 Amazon RDS 中创建数据库参数组中的说明执行操作。

  3. 编辑新的或现有的参数组以将 rds.force_ssl 参数设置为 true。要编辑参数组,请按照在 Amazon RDS 中修改数据库参数组中的参数中的说明执行操作。

  4. 如果您创建了一个新的参数组,可修改数据库实例以附加该新参数组。修改数据库实例的 DB Parameter Group 设置。有关更多信息,请参阅“修改 Amazon RDS 数据库实例”。

  5. 重启数据库实例。有关更多信息,请参阅“重启中的数据库实例”。

加密特定连接

您可以强制与数据库实例的所有连接使用 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 包括在内,请重命名该实例。当您重命名数据库实例时,新证书会进行部署,并且实例会重启以启用新证书。

获取客户端计算机的证书

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

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

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

将证书导入客户端计算机

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

将证书导入 Windows 操作系统:
  1. Start (开始) 菜单上的搜索框中,键入 Run,然后按 Enter

  2. Open (打开) 框中,键入 MMC,然后选择 OK (确定)

  3. 在 MMC 控制台中的 File 菜单上,选择 Add/Remove Snap-in

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

  5. Certificates snap-in 对话框中,选择 Computer account,然后选择 Next

  6. Select computer 对话框中,选择 Finish

  7. Add or Remove Snap-ins 对话框中,选择 OK

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

  9. 在证书导入向导的第一页上,选择 Next

  10. 在证书导入向导的第二页上,选择 Browse。在浏览窗口中,将文件类型更改为 All files (*.*) (所有文件 (*.*)),因为 .pem 不是标准证书扩展名。找到您之前下载的 .pem 文件。

  11. 选择 Open 以选择证书文件,然后选择 Next

  12. 在证书导入向导的第三页上,选择 Next

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

  14. 在 MMC 控制台中,展开 Certificates,再展开 Trusted Root Certification Authorities,然后选择 Certificates。找到证书以确认其存在,如此处所示。

    在 MMC 控制台的导航窗格中,从“控制台根节点”、“证书(本地证书)”和“受信任的根证书颁发机构”向下钻取,选择“证书”文件夹。在主页中,选择所需的 CA 证书。

对与运行 Microsoft SQL Server 的 Amazon RDS 数据库实例的连接进行加密

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

对于 SQL Server Management Studio,使用以下过程。有关 SQL Server Management Studio 的更多信息,请参阅使用 SQL Server Management Studio

对来自 SQL Server Management Studio 的连接进行加密
  1. 启动 SQL Server Management Studio。

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

  3. 选择 Options

  4. 选择 Encrypt connection

  5. 选择 Connect

  6. 通过运行以下查询确认连接已加密。验证查询为 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 实用程序执行该操作。

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

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