Ошибка дешифрования Rails + PostgreSQL SSL - PullRequest
10 голосов
/ 02 февраля 2012

У меня на рабочем сервере запущено приложение, которое использует гем pg для общения с базой данных Postgres. Postgres работает через порт по умолчанию и находится за брандмауэром, поэтому он недоступен ни из чего, кроме localhost. Я не настроил Postgres для работы с SSL.

Я получаю доступ к приложению Rails через SSL, и сертификат подписан для другого домена, поэтому при первом обращении к нему появляется ошибка сертификата ... но это единственная странная вещь, связанная с SSL.

И все же я периодически вижу это в моих журналах Rails (сопровождаемых ошибкой 500 в браузере, когда это происходит):

Started GET "/admin/pages" for <xxx.xxx.xxx.xxx> at 2012-02-02 01:52:03 -0500
Processing by PagesController#index as HTML
Completed 500 Internal Server Error in 4ms

ActiveRecord::StatementInvalid (PGError: SSL error: decryption failed or bad 
record mac
: SELECT "pages".* FROM "pages" ):
  app/controllers/pages_controller.rb:36:in `index'

Какого черта?

Ответы [ 2 ]

12 голосов
/ 02 февраля 2012

Если база данных работает только на локальном хосте, отключите SSL: шифрование локального соединения не очень полезно. Либо установите ssl=false в postgresql.conf (и перезапустите сервер БД), либо скажите клиенту не использовать SSL при подключении. В некоторых установках PostgreSQL по умолчанию использует SSL.

2 голосов
/ 25 октября 2013

Если вы посмотрите журналы PostgreSQL, вы обнаружите ту же ошибку.Вы должны заметить, что по умолчанию после установки postgresql в вашем postgresql.conf появятся следующие строки:

ssl = true
ssl_cert_file = '/etc/ssl/certs/ssl-cert-snakeoil.pem'
ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'

Для их изменения необходимо перезапустить postgresql, что может быть не очень хорошей идеей в вашей производственной системе., поскольку это нарушит работу вашего сервиса.

Если вы предпочитаете перезагрузить postgresql, вы можете вместо этого внести изменения в pg_hba.conf: с помощью директивы hostnossl.

Поскольку выиспользуя гем pg, вы также можете принудительно подключить ваше приложение без ssl, добавив эту строку в config/database.yml:

sslmode = disable

В любом случае вам, вероятно, следует настроить свою конфигурацию postgresql для использованиянадлежащие ssl-сертификаты, а не snakeoil, если вам когда-нибудь понадобится зашифрованное соединение с вашей базой данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...