2012-03-16 11 views
6

Sto eseguendo un'applicazione Rails 3.2 sullo stack Cedar a Heroku.Specificare SSL per la connessione al database MySQL esterno di Heroku

Sto usando Amazon RDS per il mio database MySQL e ho il corretto setup DATABASE_URL nel file di configurazione di Heroku vars.

Come posso ottenere che Heroku utilizzi SSL nella sua connessione ad Amazon RDS?

Normalmente questo sarà specificato come valore in database.yml, ma dal momento che Heroku genera database.yml per noi, non sono sicuro di come controllare questa impostazione.

Grazie!

risposta

1

Dall'esame del database.yml (vedere in fondo a http://neilmiddleton.com/sharing-databases-between-heroku-applications/) è possibile passare la configurazione aggiuntiva come parte dell'URL db come parametri di query.

In teoria, questo dovrebbe consentire di configurarlo come si desidera anche se non l'ho provato.

+1

Grazie Neil. Ha funzionato alla grande! Più specificamente, la mia configurazione di Heroku DATABASE_URL assomiglia a: mysql2: // nomeutente: password @ nomehost/nomeDatabase? Sslca =/percorso/a/ca.punto – Nathan

12

È possibile specificare some mysql2 SSL params tramite la configurazione DATABASE_URL. Verranno aggiunti come elementi allo database.yml dinamico generato durante il processo di generazione di Heroku e quindi verranno passati quando vengono create connessioni mysql2.

L'unico parametro necessario per il corretto funzionamento è sslca (da non confondere con sslcapath).

1. Scarica il Amazon RDS CA certificate e aggiungilo alla tua app.

(Modifica) Amazon sarà rotating this certificate a marzo 2015. Avrai bisogno del nuovo file da quella pagina invece di questo.

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

2. Aggiungere il file a git, e ridistribuire a Heroku.

3. Cambiare DATABASE_URL passare sslca:

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

Il percorso relativo è importante-cfr.

Questo è tutto! Ora che avete di lavoro SSL, si consiglia di far valere che tutte le connessioni con l'utente permettono solo SSL:

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

Risoluzione dei problemi

Assicurarsi di passare un percorso relativo alla sslca! In caso contrario, rake assets:precompile potrebbe interrompersi con un errore SSL. Se si riceve un errore simile:

SSL connection error: ASN: bad other signature confirmation 

o anche solo:

SSL connection error 

...quindi probabilmente c'è qualcosa di sbagliato nel modo in cui viene fatto riferimento al file cert CA.

+2

al punto 3: qual è il -a supponiamo di essere? è il nome dell'app heroku? – jmogera

+2

Se hai solo un'app -a {app_id} può essere saltata spesso. Usa '' 'app di app''' nel terminale per vedere quali app appartengono all'utente connesso. –

+1

Inoltre ho dovuto aggiungere la porta mysql al nostro gruppo di sicurezza. La fonte è: 0.0.0.0/0 e intervallo di porte è: 3306 – djburdick

Problemi correlati