更新应用程序以使用新的 SSL/TLS 证书连接到 Oracle 数据库实例
自 2023 年 1 月 13 日起,Amazon RDS 发布了新的证书颁发机构(CA)证书,以便使用安全套接字层或传输层安全性协议(SSL/TLS)连接到 RDS 数据库实例。接下来,您可以找到有关更新应用程序以使用新证书的信息。
本主题可帮助您确定是否有任何客户端应用程序使用 SSL/TLS 连接到您的数据库实例。
重要
更改 Amazon RDS for Oracle 数据库实例的证书时,仅有数据库侦听器会重新启动。数据库实例不重新启动。现有数据库连接不受影响,但在重新启动侦听器时,新连接将在短时间内遇到错误。
注意
对于使用 SSL/TLS 连接到数据库实例的客户端应用程序,您必须更新客户端应用程序信任存储,以包括新的 CA 证书。
更新客户端应用程序信任存储中的 CA 证书后,可以在数据库实例上轮换这些证书。强烈建议在生产环境中实现这些过程之前,先在开发或测试环境中测试它们。
有关证书轮换的更多信息,请参阅轮换 SSL/TLS 证书。有关下载证书的更多信息,请参阅使用 SSL/TLS 加密与数据库实例或集群的连接。有关对 Oracle 数据库实例使用 SSL/TLS 的信息,请参阅Oracle 安全套接字层。
确认应用程序是否使用 SSL 进行连接
如果 Oracle 数据库实例使用添加了 SSL
选项的选项组,则可能在使用 SSL。按照列出选项组的选项和选项设置中的说明进行检查。有关 SSL
选项的信息,请参阅 Oracle 安全套接字层。
查看侦听器日志以确定是否存在 SSL 连接。下面是侦听器日志中的示例输出。
date
time
* (CONNECT_DATA=(CID=(PROGRAM=program
) (HOST=host
)(USER=user
))(SID=sid
)) * (ADDRESS=(PROTOCOL=tcps)(HOST=host
)(PORT=port
)) * establish * ORCL * 0
当一个条目的 PROTOCOL
具有 tcps
值时,这显示 SSL 连接。不过,当 HOST
为 127.0.0.1
时,您可以忽略该条目。来自 127.0.0.1
的连接是数据库实例上的本地管理代理。这些连接不是外部 SSL 连接。因此,如果您看到 PROTOCOL
为 tcps
而 HOST
不是 127.0.0.1
的侦听器日志条目,则您的应用程序使用 SSL 进行连接。
要查看侦听器日志,您可以将该日志发布到 Amazon CloudWatch Logs。有关更多信息,请参阅“将 Oracle 日志发布到 Amazon CloudWatch Logs”。
更新应用程序信任存储
您可以更新使用 SQL*Plus 或 JDBC 的应用程序的信任存储以进行 SSL/TLS 连接。
更新 SQL*Plus 应用程序信任存储
您可以更新使用 SQL*Plus 的应用程序的信任存储以进行 SSL/TLS 连接。
注意
更新信任存储时,除了添加新证书外,还可以保留较旧证书。
更新 SQL*Plus 应用程序信任存储
-
下载适用于所有 Amazon 区域的新的根证书,并将此文件放在
ssl_wallet
目录中。有关下载根证书的信息,请参阅 使用 SSL/TLS 加密与数据库实例或集群的连接。
-
运行以下命令以更新 Oracle wallet。
prompt>orapki wallet add -wallet $ORACLE_HOME/ssl_wallet -trusted_cert -cert $ORACLE_HOME/ssl_wallet/
ssl-cert.pem
-auto_login_only将文件名替换为您下载的文件名。
-
运行以下命令以确认已成功更新 wallet。
prompt>orapki wallet display -wallet $ORACLE_HOME/ssl_wallet
您的输出应包含以下内容。
Trusted Certificates: Subject: CN=Amazon RDS Root 2019 CA,OU=Amazon RDS,O=Amazon Web Services\, Inc.,L=Seattle,ST=Washington,C=US
更新 JDBC 应用程序信任存储
您可以更新使用 JDBC 的应用程序的信任存储以进行 SSL/TLS 连接。
有关下载根证书的信息,请参阅 使用 SSL/TLS 加密与数据库实例或集群的连接。
有关导入证书的示例脚本,请参阅 将证书导入信任存储的示例脚本。
用于建立 SSL 连接的示例 Java 代码
以下代码说明如何设置使用 JDBC 的 SSL 连接。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class OracleSslConnectionTest { private static final String DB_SERVER_NAME = "<dns-name-provided-by-amazon-rds>"; private static final Integer SSL_PORT = "<ssl-option-port-configured-in-option-group>"; private static final String DB_SID = "<oracle-sid>"; private static final String DB_USER = "<user name>"; private static final String DB_PASSWORD = "<password>"; // This key store has only the prod root ca. private static final String KEY_STORE_FILE_PATH = "<file-path-to-keystore>"; private static final String KEY_STORE_PASS = "<keystore-password>"; public static void main(String[] args) throws SQLException { final Properties properties = new Properties(); final String connectionString = String.format( "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=%s)(PORT=%d))(CONNECT_DATA=(SID=%s)))", DB_SERVER_NAME, SSL_PORT, DB_SID); properties.put("user", DB_USER); properties.put("password", DB_PASSWORD); properties.put("oracle.jdbc.J2EE13Compliant", "true"); properties.put("javax.net.ssl.trustStore", KEY_STORE_FILE_PATH); properties.put("javax.net.ssl.trustStoreType", "JKS"); properties.put("javax.net.ssl.trustStorePassword", KEY_STORE_PASS); final Connection connection = DriverManager.getConnection(connectionString, properties); // If no exception, that means handshake has passed, and an SSL connection can be opened } }
重要
在确定了数据库连接使用 SSL/TLS 并更新了应用程序信任存储之后,可以更新数据库以使用 rds-ca-rsa2048-g1 证书。有关说明,请参阅通过修改数据库实例或集群来更新 CA 证书中的步骤 3。