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

Python连接MongoDB遭遇CERTIFICATE_VERIFY_FAILED SSL错误求助

Python连接MongoDB时SSL证书过期问题解决

问题核心

错误日志明确显示SSL证书过期导致验证失败,对应pymongo.errors.ServerSelectionTimeoutError下的certificate has expired提示,这是MongoDB Atlas集群的SSL证书未被本地环境正确识别或已过期导致的。

解决步骤

1. 更新依赖库(首选方案)

过时的pymongo或dnspython库可能无法适配MongoDB最新的SSL证书,执行以下命令更新:

pip install --upgrade pymongo dnspython

2. 手动指定CA证书(更新库后仍无效时)

从MongoDB Atlas控制台下载最新的CA证书文件,然后在连接时指定证书路径:

import pymongo

myclient = pymongo.MongoClient(
    'mongodb+srv://******:<**************>@cluster0.dr6egzq.mongodb.net/',
    tlsCAFile='/本地路径/到/ca-certificate.pem'
)

mydb = myclient['mydatabase']
mycol = mydb["customers"]

mydict = { "name": "John", "address": "Highway 37" }
x = mycol.insert_one(mydict)
print(x)

3. 临时绕过SSL验证(仅测试环境)

生产环境绝对禁止使用,仅用于快速验证逻辑:

import pymongo

myclient = pymongo.MongoClient(
    'mongodb+srv://******:<**************>@cluster0.dr6egzq.mongodb.net/',
    tls=True,
    tlsAllowInvalidCertificates=True
)

mydb = myclient['mydatabase']
mycol = mydb["customers"]

mydict = { "name": "John", "address": "Highway 37" }
x = mycol.insert_one(mydict)
print(x)

用户原代码

import pymongo

myclient = pymongo.MongoClient('mongodb+srv://******:<**************>@cluster0.dr6egzq.mongodb.net/')

mydb = myclient['mydatabase']
mycol = mydb["customers"]

mydict = { "name": "John", "address": "Highway 37" }

x = mycol.insert_one(mydict)

print(x)

翻译后的错误信息

回溯(最近的调用最后):
  文件 "C:\Users\black\project\pythonproject\venv\Lib\site-packages\testingMongo.py", 第11行, in <module>
    x = mycol.insert_one(mydict)
  文件 "C:\Users\black\project\pythonproject\venv\Lib\site-packages\pymongo\collection.py", 第628行, in insert_one
    self._insert_one(
  文件 "C:\Users\black\project\pythonproject\venv\Lib\site-packages\pymongo\collection.py", 第569行, in _insert_one      
    self.__database.client._retryable_write(acknowledged, _insert_command, session)
  文件 "C:\Users\black\project\pythonproject\venv\Lib\site-packages\pymongo\mongo_client.py", 第1475行, in _retryable_write
    with self._tmp_session(session) as s:
  文件 "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.3056.0_x64__qbz5n2kfra8p0\lib\contextlib.py", 第135行, in __enter__
    return next(self.gen)
  文件 "C:\Users\black\project\pythonproject\venv\Lib\site-packages\pymongo\mongo_client.py", 第1757行, in _tmp_session  
    s = self._ensure_session(session)
  文件 "C:\Users\black\project\pythonproject\venv\Lib\site-packages\pymongo\mongo_client.py", 第1740行, in _ensure_session
    return self.__start_session(True, causal_consistency=False)
  文件 "C:\Users\black\project\pythonproject\venv\Lib\site-packages\pymongo\mongo_client.py", 第1685行, in __start_session
    self._topology._check_implicit_session_support()
  文件 "C:\Users\black\project\pythonproject\venv\Lib\site-packages\pymongo\topology.py", 第538行, in _check_implicit_session_support
    self._check_session_support()
  文件 "C:\Users\black\project\pythonproject\venv\Lib\site-packages\pymongo\topology.py", 第554行, in _check_session_support
    self._select_servers_loop(
  文件 "C:\Users\black\project\pythonproject\venv\Lib\site-packages\pymongo\topology.py", 第238行, in _select_servers_loop
    raise ServerSelectionTimeoutError(
pymongo.errors.ServerSelectionTimeoutError: 
ac-yeuyapn-shard-00-01.dr6egzq.mongodb.net:27017: [SSL: 证书验证失败] 证书已过期 (_ssl.c:1007),
ac-yeuyapn-shard-00-02.dr6egzq.mongodb.net:27017: [SSL: 证书验证失败] 证书已过期 (_ssl.c:1007),
ac-yeuyapn-shard-00-00.dr6egzq.mongodb.net:27017: [SSL: 证书验证失败] 证书已过期 (_ssl.c:1007), 
超时时间: 30秒, 
拓扑结构描述: <TopologyDescription id: 6467ddd302fb8613579250bb, 
topology_type: ReplicaSetNoPrimary, 
servers: [
<ServerDescription ('ac-yeuyapn-shard-00-00.dr6egzq.mongodb.net', 27017) server_type: 未知, rtt: None, error=AutoReconnect('ac-yeuyapn-shard-00-00.dr6egzq.mongodb.net:27017: [SSL: 证书验证失败] 证书已过期 (_ssl.c:1007)')>, 
<ServerDescription ('ac-yeuyapn-shard-00-01.dr6egzq.mongodb.net', 27017) server_type: 未知, rtt: None, error=AutoReconnect('ac-yeuyapn-shard-00-01.dr6egzq.mongodb.net:27017: [SSL: 证书验证失败] 证书已过期 (_ssl.c:1007)')>, 
<ServerDescription ('ac-yeuyapn-shard-00-02.dr6egzq.mongodb.net', 27017) server_type: 未知, rtt: None, error=AutoReconnect('ac-yeuyapn-shard-00-02.dr6egzq.mongodb.net:27017: [SSL: 证书验证失败] 证书已过期 (_ssl.c:1007)')>
]> 

内容的提问来源于stack exchange,提问作者Meme410

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:12:54