VSCode环境下Flask应用连接MongoDB出现SSL证书验证失败如何解决
问题原因
你遇到的pymongo.errors.ServerSelectionTimeoutError: [SSL: CERTIFICATE_VERIFY_FAILED]报错,是本地VSCode环境无法验证MongoDB Atlas的SSL证书导致的连接失败,Heroku云端有完整的根证书链、原GitPod环境也提前配置了相关适配,所以部署后运行正常。
解决方案
按优先级依次尝试即可:
- 方案1:升级本地根证书库(推荐,不降低安全性)
- 执行命令更新证书依赖包:
pip install --upgrade certifi pymongo flask-pymongo- 修改
app.py中的PyMongo初始化逻辑,仅本地开发时加载系统证书:
# 原有代码不变 app.config["MONGO_DBNAME"] = os.environ.get("MONGO_DBNAME") app.config["MONGO_URI"] = os.environ.get("MONGO_URI") app.secret_key = os.environ.get("SECRET_KEY") # 新增以下代码,仅本地存在env.py时生效,不影响Heroku生产环境 if os.path.exists("env.py"): import certifi app.config["MONGO_OPTIONS"] = {"tlsCAFile": certifi.where()} mongo = PyMongo(app) - 方案2:本地开发临时跳过SSL证书验证(仅测试用,禁止上线使用)
修改env.py中的MONGO_URI,在末尾追加参数&tlsAllowInvalidCertificates=true:
注意:此处URI中的数据库名要从占位符os.environ.setdefault("MONGO_URI", "mongodb+srv://root:password@cluster0.cxur9.mongodb.net/task_manager?retryWrites=true&w=majority&tlsAllowInvalidCertificates=true")dbname改成你实际的库名task_manager,否则即使连接成功也读不到数据 - 方案3:检查MongoDB Atlas访问权限
登录MongoDB Atlas控制台,进入Network Access页面,将你本地的公网IP添加到白名单,临时开发也可以添加0.0.0.0/0允许所有IP访问(项目上线前记得删除该规则)。 - 方案4:修正VSCode环境变量加载逻辑
你当前配置的settings.json仅作用于Windows终端,如果你用VSCode调试功能启动项目,需要在.vscode文件夹下新建launch.json,配置如下:{ "version": "0.2.0", "configurations": [ { "name": "Python: Flask", "type": "python", "request": "launch", "module": "flask", "env": { "FLASK_APP": "app.py", "FLASK_DEBUG": "1", "IP": "0.0.0.0", "PORT": "5000", "SECRET_KEY": "somesecretkey", "MONGO_URI": "mongodb+srv://root:password@cluster0.cxur9.mongodb.net/task_manager?retryWrites=true&w=majority", "MONGO_DBNAME": "task_manager" }, "args": [ "run", "--no-debugger", "--no-reload" ], "jinja": true } ] }
所有修改仅作用于本地开发环境,不需要改动Heroku部署相关的代码,不会影响线上运行。
内容的提问来源于stack exchange,提问作者aWicca
相关产品推荐
相关产品推荐

