【问题标题】:Specify SSL for Heroku external MySQL database connection为 Heroku 外部 MySQL 数据库连接指定 SSL
【发布时间】:2012-04-02 05:17:55
【问题描述】:

我正在 Heroku 的 Cedar 堆栈上运行 Rails 3.2 应用程序。

我将 Amazon RDS 用于我的 MySQL 数据库,并且在 Heroku 配置变量中设置了正确的 DATABASE_URL。

如何让 Heroku 在连接到 Amazon RDS 时使用 SSL?

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

谢谢!

【问题讨论】:

    标签: mysql ruby-on-rails-3 ssl heroku


    【解决方案1】:

    您可以通过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 证书文件的引用方式可能有问题。

    【讨论】:

    • 在第 3 步下:-a 应该是什么?是 heroku 应用的名称吗?
    • 如果您只有一个应用程序 - {app_id} 通常可以跳过。在终端使用heroku apps查看登录用户有哪些应用。
    • 另外,我必须将 mysql 端口添加到我们的安全组。源是:0.0.0.0/0 端口范围是:3306
    • @djburdick - 小心!允许 0.0.0.0/0(或任何 /0)的来源正在向世界开放您的数据库防火墙。不幸的是,这是 Heroku 目前的建议,但你应该知道这就是你正在做的事情。
    • @fotinakis 同意!谢谢你说出来。实际上,我向他们提出了关于这一点的支持请求:)。在这里回答:stackoverflow.com/questions/22945465/…
    【解决方案2】:

    通过查看注入的 database.yml(参见 http://neilmiddleton.com/sharing-databases-between-heroku-applications/ 的底部),您可以将额外的配置作为 db URL 的一部分作为查询参数传递。

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

    【讨论】:

    • 谢谢尼尔。效果很好!更具体地说,我的 Heroku 配置 DATABASE_URL 类似于:mysql2://username:password@hostname/databasename?sslca=/path/to/ca.pem
    猜你喜欢
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 2018-07-12
    相关资源
    最近更新 更多