PostgreSQL LinuxWindowsсервер PostgreSQL

PostgreSQL: PostgreSQL не разрешает подключение приложения через SSL

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Приложение не подключается к PostgreSQL с TLS: встречаются ошибки сертификата, неверного имени сервера, отсутствия ssl=on или неподходящего правила hostssl. Безопасное исправление сохраняет шифрование и проверку подлинности, а не выключает их.

В этой статье
  1. Симптом и границы применимости
  2. Как отличить возможные причины
  3. Пошаговая диагностика и безопасное исправление
  4. Как проверить, что проблема устранена
  5. Если исправление не помогло

#Симптом и границы применимости

Приложение не подключается к PostgreSQL с TLS: встречаются ошибки сертификата, неверного имени сервера, отсутствия ssl=on или неподходящего правила hostssl. Безопасное исправление сохраняет шифрование и проверку подлинности, а не выключает их.

#Как отличить возможные причины

Возможная причинаКак узнатьЧто делать
Нет доверенного центраКлиент не может проверить цепочку сертификата сервера.certificate verify failedНастроить правильный корневой сертификат
Не совпадает имя сервераПодключение идёт по IP, но сертификат выдан на доменное имя.hostname mismatch при verify-fullИспользовать DNS-имя из сертификата
Сервер не предлагает SSLssl выключен либо сертификат не загружен.server does not support SSLПроверить настройки сервера и журнал

#Пошаговая диагностика и безопасное исправление

  1. 1. Сохраните ошибку клиента целикомНайдите точное сообщение sslrootcert, certificate verify failed, hostname mismatch или no pg_hba.conf entry for host ... SSL on/off. Не объединяйте эти случаи в универсальную «ошибку пароля».
  1. 2. Проверьте параметры подключения приложенияНайдите host, port, dbname, sslmode и путь к корневому сертификату в конфигурации приложения. Не отправляйте в переписку пароль или клиентский ключ; убедитесь, что приложение использует ожидаемый адрес, а не подменённый IP.
  1. 3. Проверьте соединение по имени и с проверкой узлаИз терминала клиентского сервера используйте psql с verify-full и путём к доверенному корню. В примере db.example.test — условное имя, замените на домен, указанный в сертификате.
    Linux · Терминал (Bash)Команда
    Терминал клиента с psql; пароль вводится интерактивно. Не заменяйте verify-full на disable.
    psql "host=db.example.test port=5432 dbname=appdb user=app_user sslmode=verify-full sslrootcert=/secure/ca.crt" -c "SELECT 1;"
  1. 4. Проверьте фактическое шифрованиеПосле успешного соединения в psql выполните запрос к pg_stat_ssl для собственного backend. Поле ssl должно быть true, а version — TLS; это не проверяет цепочку сертификата само по себе.
  2. psql, чтение факта TLS для текущей сессии
    SQLКоманда
    psql, чтение факта TLS для текущей сессии.
    SELECT ssl, version, cipher FROM pg_stat_ssl WHERE pid=pg_backend_pid();
  1. 5. Сверьте настройки TLS сервераАдминистратор PostgreSQL проверяет SHOW ssl, расположение cert/key, журнал загрузки сертификата и соответствие ключа. Сервер обычно требует надлежащие права на приватный ключ; не делайте его общедоступным.
    SQLКоманда
    psql; чтение параметров сервера, файловые пути могут быть относительными к data directory.
    SHOW ssl;
    SHOW ssl_cert_file;
    SHOW ssl_key_file;
  1. 6. Сопоставьте pg_hba.conf с типом соединенияЕсли применяется hostssl, проверьте, что строка подходит адресу и роли приложения; порядок правил важен. Исправление на тестовой машине должно сохранять проверку пароля и ограничивать источник.
  1. 7. Обновите сертификат или доверие по документированному процессуИспользуйте действующий сертификат с нужным DNS-именем и цепочкой доверия. Удаление проверки hostname, подмена корневого сертификата случайным файлом или sslmode=disable маскируют ошибку и снижают безопасность.
  1. 8. Проверьте приложение после согласованного измененияПроверьте несколько новых подключений через пул и убедитесь, что TLS остаётся включённым и приложение выполняет тестовый SELECT. После перевыпуска сертификата наблюдайте за ошибками в журнале сервера и клиента.

#Как проверить, что проблема устранена

psql через verify-full успешно подключается по имени из сертификата, pg_stat_ssl показывает ssl=true, а приложение выполняет запросы без отказов проверки.

#Если исправление не помогло

Если не помогло, проверьте различия DNS между контейнером приложения и сервером, срок действия сертификата, сертификаты промежуточных центров и clientcert в pg_hba.conf.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.