【问题标题】:SSL connection error when connecting to RDS MySQL from Django从 Django 连接到 RDS MySQL 时出现 SSL 连接错误
【发布时间】:2013-12-20 18:11:27
【问题描述】:

我正在尝试在 Heroku 上部署一个 Django 应用程序,并使用 RDS 实例作为数据库后端。一切正常,直到我尝试加密连接,然后我收到此错误:

OperationalError at /path/
(2026, 'SSL connection error')

设置如下:

  • 标准 Django 应用程序
  • 具有允许来自所有 IP 地址的连接的安全组的 MySQL RDS 实例
  • MySQL 用户设置为允许来自任何主机的连接
  • Amazon 的 pem 已下载并在 Django 设置中指定

在 Heroku 上:

DATABASE_URL: mysql2://username:password@instance.us-east-1.rds.amazonaws.com:3306/name_staging?sslca=path/to/mysql-ssl-ca-cert.pem

在 Django 设置中:

DATABASES = {
    'default': dj_database_url.config()
}
DATABASES['default']['OPTIONS'] = {'ssl': {'ca': 'mysql-ssl-ca-cert.pem'}}`

我已经尝试搜索并阅读了很多关于在 Rails 中设置这种类型的环境的信息,但是关于使用 Django 执行此操作的文档很少。

有没有人成功部署了类似的设置,或者有没有人想过如何解决这个错误?

更新:

通过 cli 连接和在 python 解释器中直接使用 MySQLdb 连接一样有效。

【问题讨论】:

  • 谷歌搜索,一个常见的错误来源似乎是 CN 不匹配。可悲的是,openssl 的 s_client 不适用于 mysql,否则您可以轻松调试...您可以通过 mysql cli 连接吗?
  • 是的,通过命令行连接可以正常工作。

标签: mysql django ssl heroku amazon-rds


【解决方案1】:

已解决:

pem 文件的路径必须是绝对路径,不能使用 python 尝试构建绝对路径。

DATABASES = {
    'default': dj_database_url.config()
}
DATABASES['default']['OPTIONS'] = {
    'ssl': {'ca': '/app/project_name/rds/mysql-ssl-ca-cert.pem'}
}

再一次,这样检测路径是行不通的,路径必须是硬编码的:

DATABASES['default']['OPTIONS'] = {
    'ssl': {'ca': os.path.join(os.path.dirname(__file__), 'rds', 'mysql-ssl-ca-cert.pem')}
}

【讨论】:

  • 我仍然收到 1045 错误 - 此路径与什么相关?主(根)目录?
  • 是的,它必须是完整路径。
猜你喜欢
  • 2019-07-25
  • 2019-03-08
  • 2019-06-06
  • 1970-01-01
  • 2016-08-04
  • 2019-06-05
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
相关资源
最近更新 更多