Django使用djongo连接Mongo Atlas报SSL证书验证失败如何解决
问题根因
该报错是Mongo Atlas使用的Let's Encrypt根证书过期,本地Python依赖的根证书库未更新到新的有效根证书,导致SSL校验失败。
解决方案
按优先级从高到低选择即可:
- 方案1:升级根证书和Mongo驱动依赖(优先选择,不降低安全性)
运行如下命令升级依赖:
升级完成后重启Django服务,90%以上场景可直接解决问题。pip install --upgrade pymongo certifi - 方案2:手动指定根证书路径
如果升级依赖后仍报错,可在数据库配置中显式指定certifi库提供的根证书路径,修改settings.py的数据库配置如下:
修改后重启服务即可。import certifi DATABASES = { 'default': { 'ENGINE': 'djongo', 'NAME': 'DbName', 'ENFORCE_SCHEMA': False, 'CLIENT': { 'host': 'mongodb+srv://username:password@cluster0.mny7y.mongodb.net/DbName?retryWrites=true&w=majority', 'tlsCAFile': certifi.where() } } } - 方案3:临时跳过证书校验(仅本地测试应急使用,禁止生产环境配置)
本地测试时如果需要快速恢复,可在数据库连接串后追加tlsAllowInvalidCertificates=true参数跳过SSL校验,修改后的host配置如下:
该方案会降低数据传输安全性,生产环境绝对不能使用。'mongodb+srv://username:password@cluster0.mny7y.mongodb.net/DbName?retryWrites=true&w=majority&tlsAllowInvalidCertificates=true'
内容的提问来源于stack exchange,提问作者Malina Dale
相关产品推荐
相关产品推荐

