我有一个Sping Boot 应用程序(版本2.1.1),使用PostgreSQL 9.6作为数据库。我必须使用sslmode=verify-ca
通过SSL连接到数据库。到目前为止,我所做的是在www.example.com文件中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属性中指定ssl属性,而不是在连接url中指定?
此外,还可以为证书指定相对路径,而不是使用绝对路径?
4条答案
按热度按时间ui7jx7zq1#
我在
src/main/resources
中使用了一个证书的相对路径,效果很好:URL似乎是指定这些参数的唯一位置。你也可以使用环境变量进行插值。
gwbalxhn2#
我无法让它与
org.postgresql.ssl.NonValidatingFactory
一起工作我在连接字符串的末尾追加了
?sslmode=verify-full
。默认使用
org.postgresql.ssl.LibPQFactory
默认情况下,它将在
$HOME/.postgresql/
下查找证书,如下所示:将私钥转换为pk8格式:
f4t66c6m3#
如果您使用的是GCP,请按照下面的过程连接cloudsql-postgres和spring Boot 。
我能解决它。
在云中创建数据库并创建客户端证书。
1.应在GCP DB中配置“仅允许SSL连接”。
1.必须使用以下命令将客户端密钥转换为pk 8:
sudo openssl pkcs8 -topk8 -inform PEM -outform DER -in client-key.pem -out client-key.pk8 -nocrypt
1.这些文件必须保存在运行TB的服务器中的某个地方,我使用的文件夹是
/root/pgcerts/
,因为我已经在使用它做其他事情(这个文件夹是我创建的)1.必须给予特权:
chmod o+r /root/pgcerts/client-key.pk8
在文件
application.properties
的POSTGRESQL部分中,必须使用以下信息。tvokkenx4#
如果你使用的是Hikari,你可以像这样设置属性:
相对路径将起作用。该值仅传递给
new FileInputStream(String)
。如果您需要更复杂的东西,比如加载类路径资源,那么您将需要提供一个定制的(或者只是不同的)
sslfactory
。例如,
org.postgresql.ssl.SingleCertValidatingFactory
支持classpath:
URL。