Spring Boot 使用 SSL 连接到 Postgresql
Posted
技术标签:
【中文标题】Spring Boot 使用 SSL 连接到 Postgresql【英文标题】:Spring Boot connection to Postgresql with SSL 【发布时间】:2019-06-12 22:36:14 【问题描述】:我有一个使用 Postgresql 9.6 作为数据库的 Spring Boot 应用程序(版本 2.1.1)。
我必须使用sslmode=verify-ca
通过 SSL 连接到数据库。
到目前为止我所做的是在 Application.properties 文件中设置属性
spring.datasource.url=jdbc:postgresql://`url`:`port`/`db`?
ssl=true&
sslmode=verify-ca&
sslcert=`path_to_client_cert`&
sslkey=`path_to_client_key`&
sslrootcert=`path_to_ca_cert`
有没有办法在其他一些 spring 属性中而不是在连接 url 中指定 ssl 属性?
另外,是否可以指定证书的相对路径而不是使用绝对路径?
【问题讨论】:
【参考方案1】:我无法让它与org.postgresql.ssl.NonValidatingFactory
一起工作
我将?sslmode=verify-full
附加到连接字符串的末尾。
默认使用org.postgresql.ssl.LibPQFactory
默认情况下,它将在$HOME/.postgresql/
下查找证书,如下所示:
org.postgresql.PGProperty.SSL_ROOT_CERT; root.crt
org.postgresql.PGProperty.SSL_CERT; postgresql.crt
org.postgresql.PGProperty.SSL_KEY; postgresql.pk8
要将您的私钥转换为 pk8 格式:
openssl pkcs8 -topk8 -inform PEM -outform DER -in postgresql.key -out postgresql.pk8 -nocrypt
【讨论】:
【参考方案2】:我对放在src/main/resources
中的证书使用了相对路径,效果很好:
jdbc:postgresql://db_host:db_port/db_name?
sslmode=require&
sslrootcert=`my_root_certificate.crt`
似乎 URL 是指定这些参数的唯一位置。您也可以使用环境变量进行插值。
【讨论】:
` 真的可以在这个 jdbc 连接字符串中工作吗?以上是关于Spring Boot 使用 SSL 连接到 Postgresql的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 CassandraAutoConfiguration 在 Spring Boot 应用程序和 cassandra 之间配置 ssl?
如何在 Spring Boot / Spring Data 中为 Amazon RDS Mysql 启用 SSL?