SpringBoot【问题 05】PostgreSQL数据库启用SSL后使用默认配置进行数据库连接(Navicat工具与Java程序)

官网SSL说明:https://www.postgresql.org/docs/9.1/libpq-ssl.html

1.配置

1.1 文件

使用SSL需要的4个文件,名称要一致:

  1. 客户端密钥:postgresql.key
  2. Java客户端密钥:postgresql.pk8
  3. 客户端证书:postgresql.crt
  4. 根证书:root.crt

1.2 目录

  • Linux
File Contents Effect
~/.postgresql/postgresql.crt client certificate requested by server
~/.postgresql/postgresql.key client private key proves client certificate sent by owner; does not indicate certificate owner is trustworthy
~/.postgresql/root.crt trusted certificate authorities checks that server certificate is signed by a trusted certificate authority
~/.postgresql/root.crl certificates revoked by certificate authorities server certificate must not be on this list
  • Windows

%APPDATA%\postgresql\实例:C:\Users\Administrator\AppData\Roaming\postgresql

2.测试

  • 使用SSL 模式选择 require或verify-ca都可以
  • C:\Users\Administrator\AppData\Roaming\postgresql下放置postgresql.key postgresql.crt root.crt3个文件

测试:

2.2 SpringBoot项目(Linux)

在使用 Spring Boot 连接 PostgreSQL 数据库时,如果需要使用 SSL 连接,那么私钥(sslkey)应该是 PKCS8 格式。可以使用 OpenSSL 工具将私钥转换为这种格式。来自StackOverflow的解决方案原文https://stackoverflow.com/questions/54257758/spring-boot-connection-to-postgresql-with-ssl。以下是具体的命令:

bash 复制代码
openssl pkcs8 -topk8 -inform PEM -outform DER -in postgresql.key -out postgresql.pk8 -nocrypt

未使用默认路径的自定义配置:

yaml 复制代码
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://localhost:25432/dbname?ssl=true&sslrootcert=pathTo/root.crt&sslcert=pathTo/postgresql.crt&sslkey=pathTo/postgresql.pk8
username: 'username'
password: 'password'

使用默认路径的配置:

yaml 复制代码
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://localhost:25432/dbname?sslmode=require
username: 'username'
password: 'password'

使用默认路径配置时:

  • sslmode为require或verify-ca都可以
  • ~/.postgresql下放置postgresql.pk8 postgresql.crt root.crt3个文件
  1. 测试 sslmode=require
bash 复制代码
# 目录下没有文件时
[FATAL: connection requires a valid client certificate]
# 添加root.crt后
[FATAL: connection requires a valid client certificate]
# 添加postgresql.crt后
[SSL error: Received fatal alert: unexpected_message]
# 添加postgresql.pk8
# 正常访问
  1. 测试 sslmode=verify-ca
bash 复制代码
# 目录下没有文件时
[Could not open SSL root certificate file C:\Users\Administrator\AppData\Roaming\postgresql\root.crt.]
# 添加root.crt后
[FATAL: connection requires a valid client certificate]
# 添加postgresql.crt后
[SSL error: Received fatal alert: unexpected_message]
# 添加postgresql.pk8
# 正常访问

3.总结

  • 使用默认配置要注意文件路径和文件名称
  • 其他应用程序要注意文件的权限
bash 复制代码
# 文件权限错误导致的连接失败
# 数据库连接失败:Could not open SSL root certificate file ~./postgresql/root.crt.
相关推荐
桦说编程11 分钟前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅2 小时前
Java面向对象入门(类与对象,新手秒懂)
java
初次攀爬者3 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺3 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart4 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
NE_STOP5 小时前
MyBatis-mybatis入门与增删改查
java
孟陬8 小时前
国外技术周刊 #1:Paul Graham 重新分享最受欢迎的文章《创作者的品味》、本周被划线最多 YouTube《如何在 19 分钟内学会 AI》、为何我不
java·前端·后端
想用offer打牌8 小时前
一站式了解四种限流算法
java·后端·go
华仔啊9 小时前
Java 开发千万别给布尔变量加 is 前缀!很容易背锅
java