mysql - Django MySQL 连接中的 SSL 错误(2026 SSL_CTX_set_tmp_dh 失败)
问题描述
尝试通过 settings.py 文件中的数据库 dict 连接到 RDS MySQL 实例会产生 django.db.utils.OperationalError: (2026, 'SSL connection error: SSL_CTX_set_tmp_dh failed')。
错误代码类似于django.db.utils.OperationalError: (2026, 'SSL connection error: SSL_CTX_set_tmp_dh failed'),所以我尝试使用 bin/mysql_ssl_rsa_setup 创建默认的 SSL 和 RSA 文件。
设置(从 Django 连接到 RDS MySQL 时类似于SSL 连接错误)
- 标准 Django 应用程序
- 具有安全组的 MySQL RDS 实例允许来自所有 IP 地址的连接
- MySQL 用户设置为允许来自任何主机的连接
- 亚马逊的pem已经下载,在django设置中指定
通过 cli 连接有效,通过 PyMySql 在解释器中连接也是如此。
成功的 PyMySql 连接和查询如下所示:
db = pymysql.connect(user=os.environ['DEV_DATABASE_USERNAME'],
password=os.environ['DEV_MYSQL_PASSWORD'],
host=os.environ['DEV_DATABASE_HOST'],
cursorclass=pymysql.cursors.DictCursor,
database='dev'),
ssl={'ssl':{'ca':<PATH TO CA CERT>}})
我已经尝试验证 ca 的路径是绝对的,它是,并确保我没有使用 python 来尝试构建它,就像从 Django 连接到 RDS MySQL 时出现 SSL 连接错误一样。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dev',
'USER': os.environ['DEV_DATABASE_USERNAME'],
'HOST': os.environ['DEV_DATABASE_HOST'],
'PASSWORD': os.environ['DEV_MYSQL_PASSWORD'],
'OPTIONS': {
'ssl': { 'ca': <PATH TO CA CERT> },
}
}
}
解决方案
我通过使用完全相同的 settings.py 文件创建一个全新的 Django 项目并更新 requirements.txt 中的所有包来解决这个问题,因此问题可能是 mysqlclient、PyMySQL 和 MySQL 5.6 之间的一些不兼容。
推荐阅读
- c# - 如何在c#中将儒略日期转换为UTC
- oracle - 如何形成oracle函数-TIMESTAMP输入-日期数学-数字返回
- c# - UWP 从另一个类访问参数
- java - 使用 MapSqlParameterSource 在 Spring MVC 中按子句查询排序
- review-board - 获得评审委员会奖杯资格的标准是什么?
- java - 尝试将大量数据行从文件写入corda时出现内存不足异常
- java - 当 statusCode 断言失败并重新保证时打印响应正文
- vba - 自动填充宏
- machine-learning - Deep Mind 的可微分神经计算机 (DNC) 中 LSTM 变体的维度
- python-3.x - 查找从 am*n 维矩阵到点的欧几里得距离