为 Amazon RDS for SQL Server 和 Amazon RDS for Oracl

配置 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.jar 和 US_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 *