我在启用了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
为什么密钥库不起作用?
答案 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