Windows

無法使用客戶端證書連接到 Postgres

  • May 30, 2020

我在 Windows 伺服器上安裝了 Postgres 10.1,它作為 Windows 服務執行。它是%APPDATA%為本地系統使用者安裝的,這是執行 Window 服務的使用者帳戶:

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.

使用 sslmode=verify-full 連接意味著您希望客戶端驗證伺服器的證書,這需要使用“sslrootcert”連接參數或“PGSSLROOTCERT”環境變數指定“根證書”。我會冒險猜測它提供 %APPDATA%\postgres\root.crt 作為預設值。

錯誤消息提供了您的解決方案,但我懷疑您誤解了 - 這是客戶端錯誤而不是伺服器錯誤,伺服器配置無關緊要。

提供文件或更改 sslmode 以禁用伺服器證書驗證。

您可以將 sslmode 更改為“要求”或提供根證書。

引用自:https://serverfault.com/questions/890049