我在Heroku的Cedar栈上运行Rails 3.2应用程序。为Heroku外部MySQL数据库连接指定SSL
我正在使用Amazon RDS作为我的MySQL数据库,并且我在Heroku config vars中设置了正确的DATABASE_URL。
如何让Heroku在与Amazon RDS的连接中使用SSL?
通常这会被指定为database.yml中的一个值,但是由于Heroku为我们生成了database.yml,我不确定如何控制这个设置。
谢谢!
我在Heroku的Cedar栈上运行Rails 3.2应用程序。为Heroku外部MySQL数据库连接指定SSL
我正在使用Amazon RDS作为我的MySQL数据库,并且我在Heroku config vars中设置了正确的DATABASE_URL。
如何让Heroku在与Amazon RDS的连接中使用SSL?
通常这会被指定为database.yml中的一个值,但是由于Heroku为我们生成了database.yml,我不确定如何控制这个设置。
谢谢!
从查看注入的database.yml(请参阅http://neilmiddleton.com/sharing-databases-between-heroku-applications/的底部),您可以将额外的配置作为db URL的一部分传递给查询参数。
理论上,这应该让你配置它,你想如何,但我没有尝试过。
您可以通过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:[email protected]/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证书文件的引用方式可能有问题。
谢谢尼尔。这很好用!更具体地说,我的Heroku配置DATABASE_URL类似于:mysql2:// username:password @ hostname/databasename?sslca =/path/to/ca.pem – Nathan 2012-03-21 02:41:22