mysql - 从 Django 连接到 RDS MySQL 时出现 SSL 连接错误

标签 mysql django ssl heroku amazon-rds

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

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

这是设置:

  • 标准 Django 应用程序
  • 带有安全组的 MySQL RDS 实例允许来自所有 IP 地址的连接
  • 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 直接连接一样有效。

最佳答案

已解决:

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')}
}

关于mysql - 从 Django 连接到 RDS MySQL 时出现 SSL 连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20709581/

相关文章:

python - 如何在 Django ORM 中获取常量列?

django - 通过login_required装饰器转发POST参数的建议方法?

具有本地 LAN IP 的 Android 自签名证书

PHP无法连接生产服务器上的MySQL

mysql - 从 MySQL 中的 JSON 列中的 JSON 项目的日期查询日期之前的记录

mysql - 无论年份如何,如何检查日期是否在范围内

javascript - Django JavaScript 翻译 gettext 未定义

mysql - 对结果表进行 SQL 查询

java - CXF Web 服务客户端忽略 ssl 配置 http-conf :tlsClientParameters

java - 导入 Git 存储库时 Jenkins "unable to find valid certification path to requested target"错误