Django与MySQL安全连接配置报错:需解决强制加密连接问题
解决Django连接MySQL时的安全加密连接报错问题
针对你遇到的Connections using insecure transport are prohibited while --require_secure_transport=ON报错,可通过以下调整确保Django与MySQL建立加密连接:
1. 完善SSL配置参数
当前配置仅提供了客户端证书(cert)和密钥(key),但缺少CA证书(ca),且未明确强制SSL连接模式。调整后的配置需补充CA证书路径,并添加强制SSL连接的参数:
DATABASES['default']['ENGINE'] = 'django.db.backends.mysql' DATABASES['default']['NAME'] = 'database' DATABASES['default']['HOST'] = "v2_host" DATABASES['default']['USER'] = "v2_user" DATABASES['default']['PASSWORD'] = "password" DATABASES['default']['CONN_MAX_AGE'] = 180 DATABASES['default']['OPTIONS'] = { 'init_command': 'SET SESSION wait_timeout=300', 'ssl_mode': 'REQUIRED', # 强制要求SSL连接,拒绝非加密请求 'ssl': { 'ca': "/home/myuser/cacertpath", # 替换为你的CA证书实际路径 'cert': "/home/myuser/certpath", 'key': "/home/myuser/keypath", } }
2. 确保证书文件权限正确
Django运行进程(如web服务器用户www-data或应用专属用户)必须拥有证书文件的读取权限,建议将证书文件权限设置为600,避免其他用户访问:
chmod 600 /home/myuser/cacertpath /home/myuser/certpath /home/myuser/keypath chown your_app_user:your_app_group /home/myuser/cacertpath /home/myuser/certpath /home/myuser/keypath
3. 验证加密连接是否生效
调整配置后,可在Django中执行以下代码验证连接是否已加密:
from django.db import connection with connection.cursor() as cursor: cursor.execute("SHOW STATUS LIKE 'Ssl_cipher';") result = cursor.fetchone() print(result)
如果返回的Ssl_cipher值不为空(如ECDHE-RSA-AES256-GCM-SHA384),则说明加密连接已成功建立。
额外排查点
- 检查
mysqlclient版本:确保使用2.0.0及以上版本,旧版本对SSL参数的支持可能存在缺陷。 - 确认服务器SSL要求:若MySQL服务器启用双向认证,需确保你的客户端证书和密钥已在服务器端注册;若仅单向认证,可能只需
ca参数和ssl_mode: 'REQUIRED'即可。
内容的提问来源于stack exchange,提问作者NPatel
相关产品推荐
相关产品推荐

