我在启用了 SSL 的 Amazon RDS 实例上创建了一个 Postgres 数据库。可以使用 Amazon (.pem) 提供的证书文件通过命令行访问该实例。现在我想连接到 Spring Boot 应用程序中的数据库。做了一些研究,看来我必须使用 keytool
命令在 keystore 中安装证书 Import PEM into Java Key Store .所以我运行了以下命令来生成 jks key 。
openssl x509 -outform der -in rds-combined-ca-bundle.pem -out aws-cert.der
keytool -import -alias rds-key -keystore rds.jks -file aws-cert.der
keytool -list -keystore rds.jks
我还运行了命令 keytool -list -keystore rds.jks
来列出用于验证的 keystore 。
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
rds-key, Oct 16, 2017, trustedCertEntry,
Certificate fingerprint (SHA1): E8:11:88:56:E7:A7:CE:3E:5E:DC:9A:31:25:1B:93:AC:DC:43:CE:B0
将 rds.jks
文件复制到/src/main/resources 后,我在 application.properties
中为 ssl 添加了以下行:
server.ssl.enabled=true
server.ssl.key-alias=rds-key
server.ssl.key-password=xxx111
server.ssl.key-store=classpath:rds.jks
server.ssl.key-store-provider=SUN
server.ssl.key-store-type=JKS
但是我得到了错误:
java.lang.IllegalArgumentException: java.io.IOException: Alias name [rds-key] does not identify a key entry
为什么 keystore 不起作用?
最佳答案
为 spring boot 应用程序配置 SSL keystore/truststore 准备出站/入站 https 连接使用的 ssl 上下文。您需要为 postgres 数据库连接配置不同的 SSL 套接字工厂。使用 postgres lib 提供的实现或创建您自己的自定义 SSLSocketFactory 类,该类使用您的 rds 特定 keystore 准备 ssl 上下文。
请查看 -> https://basildoncoder.com/blog/postgresql-jdbc-client-certificates.html
关于java - 如何在启用 SSL 的 Spring Boot 应用程序中连接到 RDS postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46779019/