本文将介绍如何为运行 RDS 的 SQL Server 和 Oracle 的 Amazon RDS 实例配置 SSL/TLS 连接。本文重点包括:
通信的完整性和机密性对客户和数据库之间的连接非常重要。然而,出于实际复杂性或对所用工具的认知障碍,SSL的部署有时会面临阻力。通过本篇文章,我们将展示如何通过广泛使用的客户端应用程序来配置 SSL/TLS 连接。
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
参数。每个数据库引擎都有其实现 SSL/TLS 的过程。要了解如何为您的 DB 实例实施 SSL/TLS,您可以参考 。
本节演示如何使用 SSMS 和 DBeaver 配置到 Amazon RDS for SQL Server 的 SSL 连接。SSMS 使用 Windows证书存储。按照以下步骤将您的证书导入 Windows 证书存储:
certmgr.msc
。.pem
不是标准证书扩展。.pem
文件。在 SSMS 连接属性 标签中,选择 加密连接 和 信任服务器证书 。
为了使用 DBeaver 连接到 RDS for SQL Server:
本节展示如何通过 Oracle SQL Developer 和 SQL*PLUS 指令行配置到 Amazon RDS for Oracle 的 SSL连接。
为安全地通过 Oracle SQL Developer 连接 Oracle,首先执行连接到命令行所需的操作。前提条件如下:
请完成以下步骤:
C:\
(此软件将被解压到 C:\openssl
)。local_policy.jar
和 US_export_policy.jar
。C:\
。orapki.bat
(C:\oracle\bin
)openssl.exe
(C:\OpenSSL\bin
)keytool.exe
(C:\oracle\jdk\bin
)sqlnet.ora
(C:\oracle\network\admin
)C:\sqldeveloper-ssl
)sqldeveloper.conf
(C:\sqldeveloper\sqldeveloper\bin
)shell C:\oracle\bin\orapki wallet create -wallet C:\oracle\ssl_wallet -auto_login_only
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
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>)) ) )
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)
tnsnames.ora
文件位置的环境变量: shell set TNS_ADMIN= C:\oracle\network\admin
shell ECHO %TNS_ADMIN%
您可以通过将 tnsnames.ora
文件的位置添加到系统环境变量中,使这一设置为永久。sqlplus
命令建立与数据库的安全连接,并使用 SELECT SQL 语句确认已建立安全连接: shell sqlplus admin@ORCLSSL SELECT SYS_CONTEXT('USERENV', 'DB_NAME') || ' connected with ' || SYS_CONTEXT('USERENV', 'network_protocol') FROM DUAL;
响应应该是 <dbname>
已连接的字符串以及 tcps
。.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
shell C:\oracle\jdk\bin\keytool -keystore C:\oracle\jdk\jre\lib\security\clientkeystore -genkey -alias client
系统会要求您输入密码,请妥善保管该密码,因为后续步骤将需要它。shell dir C:\oracle\jdk\jre\lib\security\clientkeystore
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
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
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
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)))
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