我正在Heroku的Cedar堆栈上运行Rails 3.2应用程序。
我正在使用Amazon RDS作为我的MySQL数据库,并且我在Heroku配置变量中设置了正确的DATABASE_URL。
如何让Heroku在与Amazon RDS的连接中使用SSL?
通常这会被指定为database.yml中的值,但由于Heroku为我们生成了database.yml,我不知道如何控制此设置。
谢谢!
答案 0 :(得分:13)
您可以通过DATABASE_URL
配置指定some mysql2 SSL params。它们将作为项添加到Heroku构建过程中生成的动态database.yml
中,因此在创建mysql2连接时它们将被传递。
您需要传递的唯一参数是sslca
(不要与sslcapath
混淆)。
<强> 1。下载Amazon RDS CA certificate并将其与您的应用捆绑在一起。
(编辑)亚马逊将于2015年3月成为rotating this certificate。您将需要该页面中的新文件而非此文件。
curl https://s3.amazonaws.com/rds-downloads/mysql-ssl-ca-cert.pem > ./config/amazon-rds-ca-cert.pem
<强> 2。将文件添加到git,然后重新部署到Heroku。
第3。更改DATABASE_URL
以通过sslca
:
heroku config:add DATABASE_URL="mysql2://username:password@hostname/dbname?sslca=config/amazon-rds-ca-cert.pem -a <app_id>
相对路径很重要 - 见下文。
那就是它!现在您已经使用SSL了,您可能希望强制所有与该用户的连接仅允许SSL:
GRANT USAGE ON dbname.* TO 'username'@'%' REQUIRE SSL;
故障排除
确保将相对路径传递给sslca
!否则,rake assets:precompile
可能会因SSL错误而中断。如果您收到如下错误:
SSL connection error: ASN: bad other signature confirmation
甚至只是:
SSL connection error
...那么CA证书文件的引用方式可能有问题。
答案 1 :(得分:1)
通过查看注入的database.yml(参见http://neilmiddleton.com/sharing-databases-between-heroku-applications/的底部),您可以将额外配置作为查询参数的db URL传递。
理论上,这应该让你按照你想要的方式进行配置,尽管我没有尝试过。