2012-03-16 7 views
6

Estoy ejecutando una aplicación Rails 3.2 en la pila Cedar en Heroku.Especifique SSL para la conexión de base de datos MySQL externa de Heroku

Estoy usando Amazon RDS para mi base de datos MySQL, y tengo la configuración correcta de DATABASE_URL en los valores de configuración de Heroku.

¿Cómo hago para que Heroku utilice SSL en su conexión a Amazon RDS?

Normalmente esto se especificaría como un valor en database.yml, pero dado que Heroku genera database.yml para nosotros, no estoy seguro de cómo controlar esta configuración.

Gracias!

Respuesta

1

Al mirar el database.yml inyectado (vea la parte inferior de http://neilmiddleton.com/sharing-databases-between-heroku-applications/) puede pasar una configuración adicional como parte de la URL de db como parámetros de consulta.

En teoría, esto debería permitirle configurarlo como quiera, aunque no lo haya intentado.

+1

Gracias Neil. Eso funcionó muy bien! Más específicamente, mi configuración de Heroku DATABASE_URL tiene el siguiente aspecto: mysql2: // nombre de usuario: contraseña @ nombre de host/nombre de base de datos? Sslca =/ruta/a/ca.pem – Nathan

12

Puede especificar some mysql2 SSL params mediante la configuración DATABASE_URL. Se agregarán como elementos al database.yml dinámico que se genera durante el proceso de compilación de Heroku, por lo que se pasarán cuando se creen las conexiones de mysql2.

El único parámetro que debe pasar para que esto funcione es sslca (no debe confundirse con sslcapath).

1. Descargue el archivo Amazon RDS CA certificate y agréguelo a su aplicación.

(Editar) Amazon será rotating this certificate en marzo de 2015. Necesitará el nuevo archivo de esa página en lugar de este.

curl https://s3.amazonaws.com/rds-downloads/mysql-ssl-ca-cert.pem > ./config/amazon-rds-ca-cert.pem

2. Añadir el archivo en Git, y volver a desplegar a Heroku.

3. Cambio DATABASE_URL pasar sslca:

heroku config:add DATABASE_URL="mysql2://username:[email protected]/dbname?sslca=config/amazon-rds-ca-cert.pem -a <app_id>

La ruta relativa no es importante, véase más adelante.

Eso es todo! Ahora que tiene SSL de trabajo, es posible que desee hacer cumplir que todas las conexiones con los que el usuario sólo permiten SSL:

GRANT USAGE ON dbname.* TO 'username'@'%' REQUIRE SSL; 

Solución de problemas

Asegúrese de pasar una ruta relativa a sslca! De lo contrario, rake assets:precompile puede romperse con un error de SSL. Si recibe un error como:

SSL connection error: ASN: bad other signature confirmation 

o incluso sólo:

SSL connection error 

...entonces es probable que haya algún problema con la forma en que se hace referencia al archivo cert de CA.

+2

en el paso 3: ¿qué supone-a suponer? es el nombre de la aplicación heroku? – jmogera

+2

Si solo tiene una aplicación, a menudo se puede omitir {app_id}. Use '' 'heroku apps''' en la terminal para ver qué aplicaciones pertenecen al usuario que ha iniciado sesión. –

+1

Además, tuve que agregar el puerto mysql a nuestro grupo de seguridad. La fuente es: 0.0.0.0/0 y el rango de puertos es: 3306 – djburdick

Cuestiones relacionadas