目 录CONTENT

文章目录

Java中JDBC的SSL协议连接PostgreSQL

大T
2022-02-10 / 0 评论 / 0 点赞 / 114 阅读 / 0 字

Java中JDBC的SSL协议连接PostgreSQL

一、为什么要采用SSL协议连接数据库

有各种各样的理由,但是其实就一句话:使用证书验证连接数据库更加安全。

二、如何配置数据库端SSL

使用ssl协议连接postgresql分为两步骤:

  1. 使用ssl协议连接数据库,需要现在数据库服务端配置ssl服务生成ssl证书,具体步骤参考:postgresql ssl设置
  2. 客户端连接数据库的时候加载ssl证书。

三、Java中怎么使用Jdbc连接

java中jdbc使用ssl协议连接数据库非常简单,只需要在数据库的jdbc连接串中加入参数即可,不需要改动一行代码。

sprigboot配置如下:

  datasource:
    url: jdbc:postgresql://127.0.0.1:4432/testdb?&sslmode=verify-ca&sslrootcert=src/main/resources/dbcerts/root.crt&sslcert=src/main/resources/dbcerts/postgresql.crt&sslkey=src/main/resources/dbcerts/postgresql.unprotected.pk8
    username: poestgres
    password: 111111
说明:

1)postgreSql通常是三个证书,一个根证书,一个客户端证书,一个客户端密钥。

使用jdbc连接时客户端密钥必须是pk8形式!

使用jdbc连接时客户端密钥必须是pk8形式!

使用jdbc连接时客户端密钥必须是pk8形式!

2)相对路径是从src目录开始的,不是classpath也不是resouces目录,是src。

3)如果证书是放在相对路径下,需要添加到.ignore文件,防止证书上传到版本控制仓里。

四、报错

4.1 08006 Could not read SSL key

如果一直报这个错,最大的原因可能是你的私钥是.key的格式,在jdbc中,必须是用pk8的格式。

key转pk8命令,服务端执行:

openssl pkcs8 -topk8 -inform PEM -outform DER -nocrypt -in postgresql.key -out postgresql.unprotected.pk8
-nocrypt是说密钥不加密,若密钥加密还需要修改jdbc连接串加上密钥的密码。

4.2 Caused by: java.security.NoSuchAlgorithmException: Cannot find any provider supporting 1.2.840.113549.1.5.13

密钥带密码了,重新转化或者生成,把证书的密码去掉。

0

评论区