为Heroku外部MySQL数据库连接指定SSL

为Heroku外部MySQL数据库连接指定SSL,mysql,ruby-on-rails-3,ssl,heroku,Mysql,Ruby On Rails 3,Ssl,Heroku,我正在Heroku的Cedar stack上运行Rails 3.2应用程序 我在MySQL数据库中使用AmazonRDS,我在Heroku配置变量中设置了正确的数据库URL 如何让Heroku在与Amazon RDS的连接中使用SSL 通常,这将被指定为database.yml中的一个值,但由于Heroku为我们生成database.yml,我不确定如何控制此设置 谢谢 通过查看注入的database.yml(参见的底部),您可以将额外的配置作为db URL的一部分作为查询参数传递 从理论上讲,

我正在Heroku的Cedar stack上运行Rails 3.2应用程序

我在MySQL数据库中使用AmazonRDS,我在Heroku配置变量中设置了正确的数据库URL

如何让Heroku在与Amazon RDS的连接中使用SSL

通常,这将被指定为database.yml中的一个值,但由于Heroku为我们生成database.yml,我不确定如何控制此设置


谢谢

通过查看注入的database.yml(参见的底部),您可以将额外的配置作为db URL的一部分作为查询参数传递

从理论上讲,这应该可以让您按照自己的意愿进行配置,尽管我还没有尝试过

您可以通过
数据库URL
配置进行指定。它们将作为项目添加到Heroku构建过程中生成的动态
数据库.yml
,因此在创建mysql2连接时将传递它们

您需要传递的唯一参数是
sslca
(不要与
sslcapath
混淆)

1。下载并将其与应用捆绑在一起。

(编辑)亚马逊将于2015年3月上市。您将需要该页面中的新文件,而不是此文件

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

2。将文件添加到git,然后重新部署到Heroku。

3。更改
数据库\u URL
以通过
sslca

heroku配置:添加数据库password@hostname/dbname?sslca=config/amazon-rds-ca-cert.pem-a

此处的相对路径很重要,请参见下文

就是这样!现在SSL已经工作,您可能希望强制所有与该用户的连接只允许SSL:

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

故障排除

请确保将相对路径传递给
sslca
!否则,
rake资产:预编译
可能会因SSL错误而中断。如果收到类似以下错误:

SSL connection error: ASN: bad other signature confirmation
甚至只是:

SSL connection error

…那么,CA证书文件的引用方式可能有问题。

谢谢Neil。效果很好!更具体地说,我的Heroku配置数据库的URL类似于:mysql2://username:password@hostname/databasename?sslca=/path/to/ca.pem第3步:假设-a是什么?heroku应用程序的名称是什么?如果您仅ave one app-a{app_id}通常可以跳过。在终端中使用
heroku apps
查看哪些应用属于登录用户。此外,我还必须将mysql端口添加到我们的安全组中。源代码为:0.0.0.0/0,端口范围为:3306@djburdick-小心!允许源为0.0.0.0/0(或任何/0)正在向全世界开放您的数据库防火墙。不幸的是,这是Heroku当前的建议,但您应该知道这正是您正在做的。@fotinakis同意!感谢您的呼吁。我实际上向他们请求支持:)。回答如下: