为 Amazon RDS for SQL

配置 SSL/TLS 客户端连接到 Amazon RDS

关键要点

本文将介绍如何为运行 RDS 的 SQL Server 和 Oracle 的 Amazon RDS 实例配置 SSL/TLS 连接。本文重点包括:

  • 使用常见数据库管理工具(如 SQL Server Management Studio、DBeaver 和 Oracle SQL Developer)配置 SSL/TLS 。
  • 了解 SSL 和 TLS 的基本原理,以及 SSL/TLS 证书如何在安全数据库连接中工作。
  • 按照步骤在 Amazon RDS 中为 SQL Server 和 Oracle 配置 SSL/TLS 连接。

通信的完整性和机密性对客户和数据库之间的连接非常重要。然而,出于实际复杂性或对所用工具的认知障碍,SSL的部署有时会面临阻力。通过本篇文章,我们将展示如何通过广泛使用的客户端应用程序来配置 SSL/TLS 连接。

SSL 概述

SSL 是一种标准安全技术,用于在服务器和客户端之间建立加密链接。如今 SSL 已被 TLS 取代,后者修复了 SSL的现有漏洞,并能够高效地执行身份验证。

SSL/TLS 证书是由受信任的 (CA)签名的数字文档,能够帮助系统验证身份,并随后使用 SSL/TLS 协议与另一系统建立加密的网络连接。所谓的“传输中的加密”使用 SSL/TLS 协议,而 SSL/TLS 证书必须加载到数据库中。

一般来说,数据库服务器倾向于在没有互联网暴露的私有网络中配置,有时会使用自签名证书。自签名证书提供加密功能,但并不提供来自受信任 CA 的身份验证。

证书链

证书链是一个有序的证书列表,包含 SSL/TLS 证书和 CA 证书,使接收方可以验证发送方及所有 CA 是否可信。链条从 SSL/TLS证书开始,每个证书由下一个证书所定义的实体进行签名。下面的图示展示了一条证书链。

删除)

解决方案概述

对于所有 Amazon RDS 数据库引擎,当 DB 实例被创建时,会生成 SSL 证书。该证书以 DB 实例端点作为 SSL证书的通用名称(CN),以防止 。

要配置 SSL:

  • 对于 ,在参数组中使用 rds.force_ssl 参数。
  • 对于 ,在 中使用 SQLNET.CIPHER_SUITE、FIPS.SSLFIPS_140 和 SQLNET.SSL_VERSION 参数, 并在实例的安全组配置中禁用 1521 端口的访问。

每个数据库引擎都有其实现 SSL/TLS 的过程。要了解如何为您的 DB 实例实施 SSL/TLS,您可以参考 。

前提条件

  • 一台 Amazon RDS for Oracle 或 Amazon RDS for SQL Server 数据库实例。
  • 出于安全最佳实践,您可以在 (Amazon EC2)实例上安装和使用以下客户端,并私密访问 RDS 实例。
  • Microsoft SQL Server Management Studio (SSMS)

为 Amazon RDS for SQL Server 配置 SSL/TLS 连接

本节演示如何使用 SSMS 和 DBeaver 配置到 Amazon RDS for SQL Server 的 SSL 连接。SSMS 使用 Windows证书存储。按照以下步骤将您的证书导入 Windows 证书存储:

  1. 在 SSMS 中打开 certmgr.msc
  2. 展开 证书 ,右键点击 受信任的根证书颁发机构
  3. 选择 所有任务 ,然后选择 导入
  4. 在证书导入向导的第一页中选择 下一步
  5. 选择 浏览
  6. 在浏览窗口中,将文件类型更改为 所有文件 (.),因为 .pem 不是标准证书扩展。
  7. 找到您之前下载的 .pem 文件。
  8. 选择 打开 ,然后选择 下一步
  9. 选择 完成 。对话框会提示导入成功。
  10. 在证书管理控制台中,展开 证书 ,展开 受信任的根证书颁发机构 并选择 证书
  11. 确认证书存在。

SSMS 连接属性 标签中,选择 加密连接信任服务器证书

为了使用 DBeaver 连接到 RDS for SQL Server:

  1. 在 DBeaver 的 标签下,选择 连接设置 ,然后选择 信任服务器证书
  2. SSL 标签 中,选择 使用 SSL
  3. 密钥库 字段中,输入您的密钥库路径。

为 Amazon RDS for Oracle 配置 SSL/TLS 连接

本节展示如何通过 Oracle SQL Developer 和 SQL*PLUS 指令行配置到 Amazon RDS for Oracle 的 SSL连接。

为安全地通过 Oracle SQL Developer 连接 Oracle,首先执行连接到命令行所需的操作。前提条件如下:

  • 创建一个新的选项组以配置 RDS 实例的参数。
  • 使用的 。
  • 用于创建与 RDS 实例的 SSL 连接。
  • 以获得 RDS 实例的图形用户界面(GUI)。
  • 连接数据库时使用的 AWS 证书包。

请完成以下步骤:

  1. 导航至 RDS 控制台。
  2. 在选项组下,选择创建一个新选项组,包含 SSL 选项。
  3. 下载 ,并将客户端软件解压到任意目录。
  4. 运行从解压文件中提取的 setup.exe 文件。
  5. 下载 ,并将 OpenSSL 软件解压到 C:\(此软件将被解压到 C:\openssl)。
  6. 下载 ,并将文件解压到任意目录。我们需要使用的两个文件是 local_policy.jarUS_export_policy.jar
  7. 下载 ,并将软件解压到 C:\
  8. 从 AWS ,选择您所在区域的证书。
  9. 找到配置所需的以下文件:
  10. orapki.bat (C:\oracle\bin)
  11. openssl.exe (C:\OpenSSL\bin)
  12. keytool.exe (C:\oracle\jdk\bin)
  13. sqlnet.ora (C:\oracle\network\admin)
  14. JCE 文件 (C:\sqldeveloper-ssl)
  15. sqldeveloper.conf (C:\sqldeveloper\sqldeveloper\bin)
  16. 通过以下命令创建钱包(在 Windows 命令窗口中):
    shell C:\oracle\bin\orapki wallet create -wallet C:\oracle\ssl_wallet -auto_login_only
  17. 添加 Amazon RDS 证书到钱包:
    shell C:\oracle\bin\orapki wallet add -wallet C:\oracle\ssl_wallet -trusted_cert -cert C:\sqldeveloper-ssl\us-gov-west-1-bundle.pem -auto_login_only
  18. tnsnames.ora 文件中添加数据库条目。请注意,新安装的客户端中该文件可能不存在。请在与 sqlnet.ora 文件相同的目录下创建名为 tnsnames.ora 的文本文件,添加以下条目: shell ORCLSSL =(DESCRIPTION = (ADDRESS = (PROTOCOL = TCPS)(HOST = <orclssl.xxxxx.us-gov-west-1.rds.amazonaws.com>)(PORT = 2484)) (CONNECT_DATA= (SERVER = DEDICATED) (SID = <orclssl>)) ) )
  19. sqlnet.ora 文件中添加钱包位置的条目: shell WALLET_LOCATION= (SOURCE= (METHOD=file) (METHOD_DATA=(DIRECTORY= C:\oracle\ssl_wallet))) SSL_CLIENT_AUTHENTICATION = FALSE SSL_VERSION = 1.2 SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA) SSL_SERVER_DN_MATCH = NO SQLNET.AUTHENTICATION_SERVICES = (TCPS,TNS) NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
  20. 打开 Windows 命令窗口并通过以下命令设置包含 tnsnames.ora 文件位置的环境变量: shell set TNS_ADMIN= C:\oracle\network\admin
  21. 使用以下代码确认: shell ECHO %TNS_ADMIN% 您可以通过将 tnsnames.ora 文件的位置添加到系统环境变量中,使这一设置为永久。
  22. 使用以下 sqlplus 命令建立与数据库的安全连接,并使用 SELECT SQL 语句确认已建立安全连接: shell sqlplus admin@ORCLSSL SELECT SYS_CONTEXT('USERENV', 'DB_NAME') || ' connected with ' || SYS_CONTEXT('USERENV', 'network_protocol') FROM DUAL; 响应应该是 <dbname> 已连接的字符串以及 tcps
  23. 使用以下命令将来自 AWS 的证书从 .pem 格式转换为 .der 格式: shell set OPENSSL_CONF=C:\OpenSSL\bin\openssl.cnf C:\OpenSSL\bin\openssl x509 -outform der -in C:\sqldeveloper-ssl\us-gov-west-1-bundle.pem -out C:\oracle\ssl_wallet\us-gov-west-1-bundle.der dir C:\oracle\ssl_wallet
  24. 使用以下命令创建密钥库: shell C:\oracle\jdk\bin\keytool -keystore C:\oracle\jdk\jre\lib\security\clientkeystore -genkey -alias client 系统会要求您输入密码,请妥善保管该密码,因为后续步骤将需要它。
  25. 确认文件已创建: shell dir C:\oracle\jdk\jre\lib\security\clientkeystore
  26. 导入 AWS 证书(以 .der 格式): shell C:\oracle\jdk\bin\keytool -import -alias rds-root -keystore C:\oracle\jdk\jre\lib\security\clientkeystore -file C:\oracle\ssl_wallet\us-gov-west-1-bundle.der
  27. 复制 JCE 文件: shell copy C:\sqldeveloper-ssl\local_policy.jar C:\oracle\jdk\jre\lib\security copy C:\sqldeveloper-ssl\US_export_policy.jar C:\oracle\jdk\jre\lib\security
  28. 编辑 Oracle SQL Developer 配置文件 (sqldeveloper.conf),并添加以下条目: shell AddVMOption -Djavax.net.ssl.trustStore=C:\oracle\jdk\jre\lib\security\clientkeystore AddVMOption -Djavax.net.ssl.trustStoreType=JKS AddVMOption -Djavax.net.ssl.trustStorePassword=<keystore password> AddVMOption -Doracle.net.ssl_cipher_suites=TLS_RSA_WITH_AES_256_CBC_SHA
  29. 启动 Oracle SQL Developer,并导航到 工具首选项数据库高级 ,设置 Oracle 客户端位置。
  30. 创建与数据库的安全连接,连接信息如下: shell (DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=<orclssl.xxxxxxx.us-gov-west-1.rds.amazonaws.com>)(PORT=2484)) (CONNECT_DATA=(SID=orclssl))(SECURITY = (MY_WALLET_DIRECTORY = C:\oracle\ssl_wallet)))
  31. 使用以下 SQL 确认连接通过 TCPS 完成: sql SELECT SYS_CONTEXT('USERENV', 'DB_NAME') || ' connected with ' || SYS_CONTEXT('USERENV', 'network_protocol') FROM DUAL;

到此为止,数据库正在监听两个端口:1521(不安全连接)和 2484(安全连接)。为了防止使用 1521端口的连接,请编辑安全组的入站规则以禁止该端口的访问。

清理

测试完成后,请删除 RDS 实例及任何用于创建堡垒的 EC2 实例。

结论

在本文中,我们展示了如何配置多种数据库客户端工具,以便在 Amazon RDS for SQL Server 和 Amazon RDS for Oracle中使用 SSL 加密。使用 SSL 可以在连接到 Amazon RDS 时保护数据的传输安全,同时确保符合您组织的安全政策和指南。

如果您有任何问题或意见,请在评论区留言。


关于作者

![Dean删除)
Dean Capps 是 AWS 的数据库顾问,拥有提供遗留、开放系统和云平台数据库支持的经验。他目前是 AWS全球能力中心的成员,为商业和公共部门客户提供同质和异质数据库迁移支持。

![Feng删除)
Feng Cai 是 AWS 的数据库顾问,拥有广泛的为不同客户提供数据库服务的背景。他当前也是 AWS全球能力中心的成员,专注于为客户提供同质和异质数据库迁移支持。

![Shirin删除)
Shirin Ali 是 AWS 的高级客户解决方案经理,作为技术 CSM 和业务战略领导者,Shirin助力客户加速云端之旅,执行强有力的项目管理,同时确保 AWS 客户实现业务价值。

![Sushant删除)
Sushant Deshmukh 是 AWS 专业服务团队的数据库顾问,与 AWS 客户和合作伙伴共同建构高度可用、可扩展、安全的数据库架构。他在 AWS 上运行数据库工作负载方面提供技术设计和实现专业知识,并帮助客户迁移和现代化其数据库到 AWS云。工作之外,他喜欢旅行、探索新的地方,打排球以及与家人和朋友共度时光。

Leave a Reply

Required fields are marked *