2012-02-02 8 views
10

Tengo una aplicación ejecutándose en mi servidor de producción que usa la gema pg para hablar con una base de datos de Postgres. Postgres se ejecuta en el puerto predeterminado y está detrás de un servidor de seguridad, por lo que no se puede acceder a él excepto a localhost. No configuré Postgres para hacer nada relacionado con SSL.Rails + Fallo de descifrado SSL PostgreSQL

Estoy accediendo a la aplicación Rails a través de SSL y el certificado está firmado para otro dominio, por lo que la primera vez que lo atiende se presenta un error de certificado ... pero eso es lo único relacionado con SSL que es raro.

Y, sin embargo, estoy viendo esta forma intermitente en mis registros de Rieles (acompañado de un error 500 en el navegador cuando sucede):

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' 

¿Qué demonios?

Respuesta

12

Si la base de datos solo se ejecuta en localhost, desactive SSL: no es realmente útil encriptar una conexión local. Establezca ssl=false en postgresql.conf (y reinicie el servidor db) o indique a su cliente que no use SSL mientras se conecta. Algunas instalaciones configuran PostgreSQL para usar SSL de manera predeterminada.

+0

¡Agradable, gracias - eso parece haber hecho el truco! – codykrieger

+1

+1 - ¡Muchas gracias! Esto me ayudó a mí también :-) –

+0

Para el registro: intenté solucionar esto desactivando la renegociación de SSL como se propuso en otros hilos, pero finalmente solo apagué SSL según lo indicado por araqnid funcionó para mí. Bummer porque también quería usar el servidor de base de datos para servicio remoto :(Esperemos un parche o una actualización que solucione esto pronto. –

2

Si mira los registros de PostgreSQL, debería encontrar el mismo error. Debe tener en cuenta que, por defecto, tras la instalación de PostgreSQL tendrá las siguientes líneas en su postgresql.conf:

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

El cambio de estos requiere que reinicie PostgreSQL, que puede no ser una buena idea en su sistema de producción, ya que se interrumpir su servicio.

Si prefiere recargar postgresql, puede realizar cambios en el pg_hba.conf en su lugar: utilizando la directiva hostnossl.

Dado que está utilizando la gema pg, también puede forzar su aplicación para conectarse sin SSL, añadiendo esta línea a su config/database.yml:

sslmode = disable 

En cualquier caso, probablemente debería ajustar su configuración de PostgreSQL para usar los certificados ssl correctos y no snakeoil, si alguna vez va a necesitar una conexión encriptada a su base de datos.