Windows
無法使用客戶端證書連接到 Postgres
我在 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 更改為“要求”或提供根證書。