如何在启用SSL的Spring Boot应用程序中连接到RDS postgres

时间:2017-10-16 20:59:45

标签: java postgresql ssl spring-boot rds

我在启用了SSL的Amazon RDS实例上创建了一个Postgres数据库。可以使用Amazon(.pem)提供的cert文件使用命令行访问该实例。现在我想在Spring Boot应用程序中连接到数据库。做了一些研究,似乎我必须使用keytool命令Import PEM into Java Key Store在密钥库中安装证书。所以我运行以下命令来生成jks密钥。

 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 / 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

为什么密钥库不起作用?

2 个答案:

答案 0 :(得分:1)

您正在设置错误的属性。以上属性为服务器启用SSL。对于RDS SSL连接,您需要设置以下属性:

javax.net.ssl.keyStorePassword = password
javax.net.ssl.trustStore = ./store_path.jks
javax.net.ssl.trustStoreType = JKS

答案 1 :(得分:0)

为spring boot应用程序配置SSL keystore / truststore会准备出站/入站https连接使用的ssl上下文。您需要为postgres数据库连接配置不同的SSL套接字工厂。使用postgres lib提供的实现或创建自己的自定义SSLSocketFactory类,使用特定于rds的密钥库来准备ssl上下文。

请查看 - > https://basildoncoder.com/blog/postgresql-jdbc-client-certificates.html