我在Heroku的Cedar栈上运行一个Rails 3.2应用程序。
我正在使用Amazon RDS作为我的MySQL数据库,并且我已经在Heroku配置变量中设置了正确的DATABASE_URL。
如何让Heroku在与Amazon RDS的连接中使用SSL?
通常,这将在database.yml中指定为一个值,但由于Heroku为我们生成database.yml,我不确定如何控制此设置。
谢谢!
我在Heroku的Cedar栈上运行一个Rails 3.2应用程序。
我正在使用Amazon RDS作为我的MySQL数据库,并且我已经在Heroku配置变量中设置了正确的DATABASE_URL。
如何让Heroku在与Amazon RDS的连接中使用SSL?
通常,这将在database.yml中指定为一个值,但由于Heroku为我们生成database.yml,我不确定如何控制此设置。
谢谢!
DATABASE_URL
配置来指定一些mysql2 SSL参数。它们将作为项目添加到动态database.yml
中,在Heroku构建过程中生成,因此在创建mysql2连接时会传递它们。sslca
(不要与sslcapath
混淆)。
1.下载Amazon RDS CA证书并将其捆绑到您的应用程序中。
(编辑)亚马逊将在2015年3月更换这张证书。您需要从该页面获取新文件。
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证书文件的引用有问题,那么很可能存在问题。
通过查看注入的 database.yml 文件(请参见 http://neilmiddleton.com/sharing-databases-between-heroku-applications/ 底部),你可以将额外的配置作为查询参数的形式传递给 db URL。
理论上,这样应该让你按照自己的意愿进行配置,不过我还没有尝试过。
heroku apps
查看属于登录用户的应用程序。 - Marc