如何在启用了SSL的Spring Boot应用程序中连接到RDS postgres
问题描述:
我已经在启用了SSL的Amazon RDS实例上创建了Postgres数据库。可以使用亚马逊(.pem)提供的cert文件通过命令行访问该实例。现在我想连接到Spring Boot应用程序中的数据库。做了一些研究,似乎我必须使用keytool
命令Import PEM into Java Key Store在密钥库中安装证书。所以我运行以下命令来生成jks键。如何在启用了SSL的Spring Boot应用程序中连接到RDS postgres
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 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目录/主/资源后,添加以下行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
为什么密钥库不起作用?
答
为spring引导应用程序配置SSL keystore/truststore准备出站/入站https连接使用的ssl上下文。您将需要为postgres数据库连接配置不同的SSL套接字工厂。可以使用postgres lib提供的实现,也可以创建自己的自定义SSLSocketFactory类,它使用您的rds特定密钥库准备ssl上下文。
请查看 - >https://basildoncoder.com/blog/postgresql-jdbc-client-certificates.html