Я установил Postgres 10.1 на сервер Windows, и он работает как служба 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
.
Подключение с помощью sslmode = verify-full подразумевает, что вы хотите, чтобы клиент проверял сертификат сервера, который требует указания «корневого сертификата» с помощью параметра подключения «sslrootcert» или переменной среды «PGSSLROOTCERT». Рискну предположить, что по умолчанию он предоставляет% APPDATA% \ postgres \ root.crt.
Сообщение об ошибке предоставляет ваше решение, но я подозреваю, что вы неправильно поняли - это ошибка клиента, а не ошибка сервера, конфигурация сервера не имеет значения.
Либо предоставьте файл, либо измените sslmode, чтобы отключить проверку сертификата сервера.
Вы можете изменить sslmode на «require» или предоставить корневой сертификат.