Getting Mysql2::Error (SSL connection error: ASN: bad other signature confirmation) on Heroku App with AWS RDS

Getting Mysql2::Error (SSL connection error: ASN: bad other signature confirmation) on Heroku App with AWS RDS

Mysql2::Error (SSL connection error: ASN: bad other signature confirmation):

我正在制作一个管理站点。环境为Rails4.2和Ruby2.2,连接AWS RDS与Heroku服务器。 我不知道为什么会出现此错误。它突然出现了。除此之外,我找不到任何错误。虽然我前两天就通过了我的代码,但这次却出现了这个错误。(这两天我没有接触过这段代码。)

我该如何解决这个问题?

对我来说,这与 2015 年 4 月 3 日发生的 RDS SSL 证书轮换有关。

但是,就我而言,仅使用根证书是行不通的,我还必须为我所在的地区使用中间证书。详情:

  1. 进入 AWS rds 控制台并重启您的 RDS 实例。

  2. 下载新的根证书https://s3.amazonaws.com/rds-downloads/rds-ca-2015-root.pem。将其放入您的应用程序的配置目录中。

  3. 为您的数据库区域下载中间证书 here。我不得不使用美国东部的,但你必须选择适合你所在地区的那个。

  4. 这是关键的一步。您需要将中间证书和根证书合并为一个文件,使中间证书位于根证书之上,形成一个证书链。使用文本编辑器打开中间证书,复制其内容,然后将它们粘贴到根证书上方的 config/rds-ca-2015-root.pem 中。所以,完成后,config/rds-ca-2015-root.pem 应该是中间证书,后面是根证书,都在这个文件中。

  5. 获取您当前的数据库url

heroku config 

然后寻找 DATABASE_URL 属性

  1. 更新您的数据库URL以使用新的证书文件。您只需要更改证书的名称(因为它现在称为 rds-ca-2015-root.pem)
heroku 
config:add DATABASE_URL="mysql2://DB_NAME:DB_PASSWORD@DB_URL/DB_NAME?sslca=config/rds-ca-2015-root.pem"
  1. 提交更改并重新部署到 Heroku。

四年后 (2019),AWS 再次按预期轮换 CA 证书。

建议 RDS 用户在 2019 年 11 月 1 日之前从 2015 年证书切换到 2019 年证书,并且“不迟于”2020 年 2 月 05 日。 2015 年证书将于 2020 年 3 月 5 日到期。

我根据 RDS 的 Rotating Your SSL/TLS Certificate 指南使用了以下程序。

  1. 安排停机时间
  2. Download 新证书,保存在 config
  • 只需要根证书:rds-ca-2019-root.pem
    • 说明中提到了 2015+2019 套装,但我找不到。此文件仅限 2019 年。
  • 不需要区域特定的中间证书
  1. 提交,但尚未部署
  2. heroku maintenance:on
  3. 在 RDS web 控制台中,修改服务器
  • 在“网络与安全”部分,选择rds-ca-2019
  • 立即应用更改
  1. 将测功机缩小到 0
  2. heorku config:set DATABASE_URL=mysql2://myuser:mypassword@myhost.rds.amazonaws.com/mydb?sslca=config/rds-ca-2019-root.pem
  3. 部署
  4. 放大测功机,观察日志
  5. heroku maintenance:off

这个过程有很多合理的变化,这正是对我有用的。