Ответ 1
Как вы писали, как правило, пакеты Ubuntu 12.x настроены так, что SSL активирован, работает из коробки, а кроме того, это первый метод, проверенный rails
, или любой клиент, который позволяет libpq
иметь дело с этим материалом, что означает почти все клиенты.
Это автоматическое включение не обязательно выполняется с другими пакетами PostgreSQL или с самокомпилированным сервером, поэтому ответы или рекомендации, применяемые к этим другим контекстам, не помогают с вашими.
Поскольку ваша настройка должна работать напрямую, этот ответ представляет собой список вещей, которые нужно проверить, чтобы узнать, что пошло не так. Предпочтительно сначала использовать psql
для проверки настройки соединения, а не rails
, так что сначала можно исключить общие проблемы postgresql.
Клиентский
Параметр sslmode
управляет последовательностью попыток подключения.
Чтобы добровольно избегать SSL, клиенту нужно было бы поставить sslmode=disable
где-нибудь в строке подключения или PGSSLMODE=disable
в среде или испортить одну из других PGSSL*
. В маловероятном случае, когда ваш процесс rails имел это в своей среде, это объясняло бы ошибку, которую вы получаете, учитывая, что pg_hba.conf
не разрешает подключения без SSL.
Еще одна причина не попробовать SSL, очевидно, когда libpq
не скомпилирован с поддержкой SSL, но это не относится к пакетам Ubuntu.
По умолчанию для sslmode
есть prefer
, который описывается как:
предпочитает (по умолчанию)
first try an SSL connection; if that fails, try a non-SSL connection
SSL=off
в конце вашего сообщения об ошибке относится к последней неудачной попытке подключения. Возможно, SSL был опробован и провалился, или вообще не пробовал, мы не можем знать только из этого сообщения. Попытка подключения с помощью SSL=off
обычно отклоняется сервером в соответствии с политикой, установленной в pg_hba.conf
(hostssl
в первом столбце).
Более правдоподобно, что проблема связана с сервером, потому что есть больше вещей, чем может пойти не так.
на стороне сервера
Вот несколько вопросов для проверки на стороне сервера:
-
В
postgresql.conf
должно бытьssl=on
(местоположение по умолчанию:/etc/postgresql/9.1/main/
) -
при подключении к localhost с помощью
psql
, вам следует приветствовать такое сообщение:
psql (9.1.13)
SSL-соединение (шифр: DHE-RSA-AES256-SHA, бит: 256)
Введите "help" для справки.
-
Пакет
ca-certificates
должен быть установлен и обновлен. -
Пакет
ssl-cert
должен быть установлен и обновлен. -
Внутри каталога данных postgres (
/var/lib/postgresql/9.1/main
по умолчанию) должны быть софт-ссылки:server.crt -> /etc/ssl/certs/ssl-cert-snakeoil.pem
или другой действительный сертификат, иserver.key -> /etc/ssl/private/ssl-cert-snakeoil.key
или другой действующий ключ. -
/etc/ssl/certs
, а родительские каталоги должны быть читаемыми и cd'able postgres. -
Пользователь
postgres
unix должен находиться в группе unixssl-cert
(проверьте с помощьюid -a postgres
), иначе он не сможет прочитать закрытый ключ. -
Если вы изменяете
postgresql.conf
, убедитесь, что postgresql перезапускается перед выполнением любого другого теста. -
Не должно быть подозрительного сообщения о SSL в
/var/log/postgresql/postgresql-9.1-main.log
во время запуска или во время неудачной попытки подключения.