You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSCode环境下Flask应用连接MongoDB出现SSL证书验证失败如何解决

问题原因

你遇到的pymongo.errors.ServerSelectionTimeoutError: [SSL: CERTIFICATE_VERIFY_FAILED]报错,是本地VSCode环境无法验证MongoDB Atlas的SSL证书导致的连接失败,Heroku云端有完整的根证书链、原GitPod环境也提前配置了相关适配,所以部署后运行正常。

解决方案

按优先级依次尝试即可:

  • 方案1:升级本地根证书库(推荐,不降低安全性)
    1. 执行命令更新证书依赖包:
    pip install --upgrade certifi pymongo flask-pymongo
    
    1. 修改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:
    os.environ.setdefault("MONGO_URI", "mongodb+srv://root:password@cluster0.cxur9.mongodb.net/task_manager?retryWrites=true&w=majority&tlsAllowInvalidCertificates=true")
    
    注意:此处URI中的数据库名要从占位符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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:36:03