0

请帮助解决以下问题...

操作系统 - Windows。我想在 Postgresql 12 上配置 SSL。然后我的 Java 应用程序将向数据库添加条目、删除等。

我创建了证书:CA、服务器、客户端。CA 和服务器位于目录 C:\Program Files\PostgreSQL\12\data 客户端位于 C:\Users\User\AppData\postgresql 然后我将 CA 证书添加到受信任的 Windows 中。

配置:

pg_hba:

hostnossl     all          all            0.0.0.0/0                reject
hostssl       all          all           0.0.0.0/0            cert clientcert=1

postgresql.conf:

ssl = on
ssl_ca_file = 'root.crt'

我可以用我的证书连接服务器 throw pgAdmin,但是在 cmd(和 java)中有一些错误,这就是我在 cmd 中尝试做的

 psql.exe -U postgres -h 127.0.0.1

结果: SSL:证书验证失败致命:pg_hba.conf 拒绝主机“127.0.0.1”、用户“postgres”、数据库“prod”的连接,SSL 关闭

日志: tlsv1 警报未知 ca 致命:pg_hba.conf 拒绝主机“127.0.0.1”、用户“postgres”、数据库“prod”的连接,SSL 关闭

请告诉我可能出了什么问题,我该如何解决...

我也没有找到信息,如何将我的证书从 Java 应用程序传输到数据库。也许,任何人都可以帮助我解决这个问题))

谢谢!

4

2 回答 2

0

然后我将 CA 证书添加到 Windows 中的受信任。

psql 不与 Windows 证书管理器集成。客户端要使用的 CA 需要进入%APPDATA%\postgresql\root.crt,或者如果在其他地方,它的位置必须由连接参数 (sslrootcert) 或环境变量 (PGSSLROOTCERT) 指定。这些必须是文件,我认为没有办法说“从证书管理器那里获取它”。

我认为 jdbc 是相同的方式,它也不与 Windows 证书管理器集成,如何指定位置见https://jdbc.postgresql.org/documentation/head/ssl-client.html

SSL:证书验证失败致命:pg_hba.conf 拒绝主机“127.0.0.1”、用户“postgres”、数据库“prod”的连接,SSL 关闭

也许您已经知道这一点,但首先它尝试使用 SSL 并未能验证证书(它没有明确说明哪一方失败,客户端证书或服务器证书),然后它尝试回退到无 SSL 并被拒绝通过 pg_hba。如果您将客户端的 sslmode 设置为“require”或更高,它就不会尝试回退到无 SSL,它会在第一个错误时停止。

于 2020-02-04T17:03:36.517 回答
0

在您的连接字符串中使用它,它将起作用:

ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
于 2020-02-04T15:11:14.417 回答