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 上启用 TLS 1.2?

设置 SSL 连接时出现 Spring Boot 错误

如何在 Spring Boot / Spring Data 中为 Amazon RDS Mysql 启用 SSL?

无法使用 Spring Boot 应用程序连接到 Docker 映像

使用 spring-boot 连接到 spring-batch 和应用程序数据库