Ошибка SSL-соединения в PostgreSQL 8.0
У нас есть приложение, которое подключается к PostgreSQL 8.0, 9.0 или 9.5 (разные версии для разных клиентов). Недавно мы решили добавить SSL-соединение для большей безопасности. Все кажется хорошим на 9.0 и 9.5, но не на 8.0.
Вот что я делаю, чтобы проверить соединение (я сравню настройки 8.0 и 9.0, так как они очень похожи). Я тестирую соединение на локальной машине, оно выполняется локально только для тестирования, поэтому не говорите мне отключить ssl для localhost, это не тот ответ, который я ищу.
Я подготовил все необходимые сертификаты. Сторона сервера:
root.crt
server.crt
server.key
И я поместил эти файлы в папки \ data в установках PostgreSQL 9.0 и 8.0.
У меня есть клиентские сертификаты:
postgresql.crt
postgresql.key
Они находятся в папке \appdata\Roaming\postgresql на одном компьютере.
Я отредактировал postgresql.conf в 8.0 и 9.0 и установил эту опцию:
ssl = on
(Я пробовал ssl = true тоже)
В pg_hba.conf у меня есть только один вариант подключения:
TYPE DATABASE USER CIDR-ADDRESS METHOD
9,0:
hostssl all all ::1/128 cert
8,0
hostssl all all 127.0.0.1/32 md5 clientcert=1
В 8.0 я использую "md5 clientcert=1", потому что нет опции "cert" (я тоже пробовал "trust" и "md5"), и я пробовал также разные адреса -::1/128, даже "all". Результат всегда один и тот же - я не могу подключиться к серверу 8.0, если доступна только опция hostssl. Я получаю эту ошибку:
SSL error: tlsv1 alet decrypt error FATAL: no pg_hba.conf entry for host "127.0.0.1", user "SU", database "template1", SSL off
У меня нет проблем с подключением к 9.0 (и к 9.5). Я использую PgAdmin III, чтобы попытаться подключиться, потому что, если я подключусь, используя его, я тоже смогу подключиться к серверу с приложением.
У кого-нибудь есть идея, почему я не могу подключиться через SSL к PostgresSQL 8.0?
2 ответа
Тот, кто использует PostgreSQL 8.0, недостаточно заботится о безопасности, чтобы заботиться о соединениях SSL, верно?
Например, поскольку база данных является объектом CVE-2013-1899, любой, кто имеет сетевой доступ к серверу, может записывать поверх произвольных файлов в базе данных.
Тем не менее, я предполагаю, что проблема в том, что сервер 8.0 использует старую версию OpenSSL, например, без исправления для CVE-2009-3555, а более поздние версии OpenSSL, содержащие исправление, отказываются от рукопожатия.
Вы можете рассмотреть возможность обновления OpenSSL на сервере 8.0.
Наконец мне удалось установить SSL-соединение с PostgreSQL 8.0. При создании файлов сертификатов (*.crt) с OpenSSL этот параметр следует добавить в команды командной строки:
-sha1
В противном случае он использует по умолчанию SHA-256, но этот алгоритм не поддерживается в старой версии openssl, включенной в PostgreSQL 8.0.