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

标签 java postgresql ssl spring-boot rds

我在启用了 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/

相关文章:

java - 程序终止时如何关闭端口?

postgresql - 带有 Rocket 和 Diesel 的 Multi-Tenancy Web 应用程序

ruby-on-rails - ruby-1.9.3-p125 ssl 错误

rest - jquery 中对 rest api 的 ajax 调用不再有效,由过期的 ssl 证书引起?

java - Netbeans 从 github 导入项目

java - 在 GenericObjectPool 中创建对象

postgresql - PostgresQL : Fill values for null rows based on rows for which we do have values

node.js - Postgres 和 NodeJS 的测试装置

使用 SSLv3 对 HTTPS 服务器的 Python REST 请求

Java 错误 "Value of local variable is not used"