无法使用客户端证书连接到 Postgres

无法使用客户端证书连接到 Postgres

我在 Windows 服务器上安装了 Postgres 10.1,它作为 Windows 服务运行。它安装在%APPDATA%本地系统用户中,这是运行 Windows 服务的用户帐户:

C:\Windows\System32\config\systemprofile\AppData\Roaming\My App Database

我的服务器端 SSL 证书位于同一目录中,并且我的 postgresql.conf 配置为找到它们:

ssl_cert_file = 'db.crt'
ssl_key_file = 'db.key'
ssl_ca_file = 'ca.crt'

我的 pg_hba.conf 文件似乎配置正确:

hostssl     my-database         my-username         0.0.0.0/0               cert clientcert=1 map=my-username

我正在尝试使用psql命令行工具连接:

psql "postgresql://my-username@localhost/my-database?sslmode=verify-full&sslkey=C:\MyDir\MyClientCert.key&sslcert=C:\MyDir\MyClientCert.crt"

但我收到此错误:

psql: root certificate file "C:\Users\Administrator\AppData\Roaming/postgresql/root.crt" does not exist Either provide the file or change sslmode to disable server certificate verification.

我在我的配置中找不到任何引用root.crt,而且我不知道为什么它会在中查找%APPDATA%\postgresql,而不是在配置的 PGDATA 目录中查找%APPDATA%\My App Database

答案1

连接sslmode=verify-full意味着您希望客户端验证服务器的证书,这需要使用“sslrootcert”连接参数或“PGSSLROOTCERT”环境变量指定“根证书”。我大胆猜测它默认提供 %APPDATA%\postgres\root.crt。

错误消息提供了您的解决方案,但我怀疑您误解了——这是一个客户端错误而不是服务器错误,服务器配置无关紧要。

提供文件或更改 sslmode 以禁用服务器证书验证。

您可以将 sslmode 更改为“require”或提供根证书。

相关内容