Você pode especificar alguns parâmetros SSL do mysql2 através do
DATABASE_URL
config. Eles serão adicionados como itens ao dinâmico database.yml
que é gerado durante o processo de compilação do Heroku e, portanto, eles serão passados quando as conexões mysql2 forem criadas. O único parâmetro que você precisa passar para que isso funcione é
sslca
(não confundir com sslcapath
). 1. Faça o download do certificado de CA do Amazon RDS e agrupe-o com seu aplicativo.
(Editar) A Amazon será rotativa este certificado em março de 2015. Você precisará do novo arquivo dessa página em vez deste.
curl https://s3.amazonaws.com/rds-downloads/mysql-ssl-ca-cert.pem > ./config/amazon-rds-ca-cert.pem
2. Adicione o arquivo ao git e reimplante no Heroku.
3. Alterar
DATABASE_URL
para passar sslca
: heroku config:add DATABASE_URL="mysql2://username:[email protected]/dbname?sslca=config/amazon-rds-ca-cert.pem -a <app_id>
O caminho relativo lá é importante – veja abaixo.
É isso! Agora que você tem o SSL funcionando, convém impor que todas as conexões com esse usuário permitam apenas SSL:
GRANT USAGE ON dbname.* TO 'username'@'%' REQUIRE SSL;
Solução de problemas
Certifique-se de passar um caminho relativo para
sslca
! Caso contrário, rake assets:precompile
pode quebrar com um erro SSL. Se você receber um erro como:SSL connection error: ASN: bad other signature confirmation
ou mesmo apenas:
SSL connection error
...então provavelmente há algo errado com a forma como o arquivo de certificado CA é referenciado.