Django应用连接SQL Server 2014时遇SSL算法不支持错误求助
解决Django连接SQL Server 2014的SSL签名算法不兼容问题
错误原因
你的Django容器使用OpenSSL 3.0.11,而SQL Server 2014仅支持SHA-1这类旧版SSL签名算法。OpenSSL 3.0默认禁用了这类被标记为不安全的旧算法,导致SSL握手失败,抛出legacy sigalg disallowed or unsupported错误。
可行解决方案
方法1:调整OpenSSL安全级别(推荐生产环境使用)
在运行Django的Docker容器中,放宽OpenSSL的安全策略,允许旧签名算法:
方式一:修改容器内OpenSSL配置文件
找到容器内的openssl.cnf文件(通常路径为/etc/ssl/openssl.cnf),添加或修改以下内容:[openssl_init] providers = provider_sect ssl_conf = ssl_sect # 新增该行 [ssl_sect] system_default = system_default_sect [system_default_sect] MinProtocol = TLSv1.2 CipherString = DEFAULT@SECLEVEL=1修改完成后重启Django容器。
方式二:通过环境变量临时调整(适配Docker部署)
在Docker启动命令或docker-compose.yml中添加环境变量,无需修改配置文件:services: django-app: ... environment: - SSL_CIPHERS=DEFAULT@SECLEVEL=1该环境变量会让OpenSSL放宽安全策略,兼容SQL Server 2014支持的旧签名算法。
方法2:调整Django数据库连接选项(仅临时测试或非严格安全场景)
如果暂时无法调整OpenSSL配置,可尝试修改数据库连接的SSL选项:
- 将
'SSL Mode': 'require'改为'SSL Mode': 'disable'(注意:这会关闭SSL加密,生产环境不推荐) - 或添加
'TrustServerCertificate': 'yes',但这仅跳过证书验证,无法从根本解决算法兼容问题,仅作临时排查使用。
方法3:升级SQL Server(长期解决方案)
SQL Server 2014已停止主流支持,升级至更高版本(如2019+)可支持更安全的现代SSL签名算法,从根源避免这类兼容问题。
内容的提问来源于stack exchange,提问作者Fabio Bove
相关产品推荐
相关产品推荐

