设置通过 JDBC 的 SSL 连接 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

设置通过 JDBC 的 SSL 连接

要使用通过 JDBC 的 SSL 连接,您必须创建密钥存储,信任 Amazon RDS 根 CA 证书并使用下面指定的代码段。

要创建 JKS 格式的 keystore,可以使用以下命令。有关创建 keystore 的更多信息,请参阅 Oracle 文档中的创建 keystore。有关参考信息,请参阅《Java Platform, Standard Edition Tools Reference》中的 keytool

keytool -genkey -alias client -validity 365 -keyalg RSA -keystore clientkeystore

按照下列步骤信任 Amazon RDS 根 CA 证书。

信任 Amazon RDS 根 CA 证书
  1. 下载适用于所有 Amazon Web Services 区域的证书捆绑 .pem 文件并将此文件放在 ssl_wallet 目录中。

    有关下载证书的信息,请参阅 使用 SSL/TLS 加密与数据库实例或集群的连接

  2. 使用操作系统实用程序将 .pem 文件中的每个证书解压缩到单独的文件中。

  3. 使用单独的 openssl 命令将每个证书转换为 .der 格式,同时将证书 certificate-pem-file 替换为证书 .pem 文件的名称(不带 .pem 扩展名)。

    openssl x509 -outform der -in certificate-pem-file.pem -out certificate-pem-file.der
  4. 使用以下命令将每个证书导入 keystore。

    keytool -import -alias rds-root -keystore clientkeystore.jks -file certificate-pem-file.der

    有关更多信息,请参阅 轮换 SSL/TLS 证书

  5. 确认成功创建了密钥存储。

    keytool -list -v -keystore clientkeystore.jks

    在出现提示时,输入密钥存储密码。

以下代码说明如何设置使用 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 } }
注意

作为安全最佳实践,请指定除此处所示提示以外的密码。