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.
相关推荐
智慧物业老杨28 分钟前
物业日常巡查的数智化重构:从“打卡式巡检“到“闭环式风控“
android·java·人工智能·系统架构·rxjava
步行cgn7 小时前
Spring c 命名空间注入详解
java·后端·spring
明月_清风7 小时前
Maven 到底是什么?一篇文章搞懂 Java 项目构建与依赖管理
java·后端·maven
aramae8 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
Rain的Java大神之路8 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
Wang's Blog9 小时前
Java 接入Redis: 通用命令与键管理
java·服务器·redis
Wang's Blog9 小时前
Java 接入Redis: 列表集合与有序集合操作命令
java·服务器·redis
Ivanqhz9 小时前
SVD++算法
java·服务器·网络·深度学习·神经网络
qq_25183645710 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
caoerzhong10 小时前
JeeWMS 开源仓库管理系统全景解读:一套 Java WMS 如何把 WMS/OMS/BMS/TMS 装进同一个系统
java·开源