如何在MacBook Air上通过Python3.6连接MongoDB Atlas并避免SSL握手错误?
解决MacBook Air上pymongo连接MongoDB Atlas的SSL证书验证失败问题
我之前在Mac上踩过一模一样的坑!Ubuntu上跑好好的,到Mac就报SSL: CERTIFICATE_VERIFY_FAILED,本质原因是Mac上的Python环境默认的SSL根证书配置有问题——不管是系统自带的Python还是brew安装的版本,都容易出现证书链不完整的情况。给你几个靠谱的解决办法,按优先级来:
1. 优先修复Python的证书存储(推荐)
Mac自带的Python通常会在安装目录里有个证书安装脚本,直接跑它就能搞定:
- 打开Finder,找到
/Applications/Python X.X/(把X.X换成你用的Python版本,比如3.10) - 双击运行里面的
Install Certificates.command,等它执行完再重新跑你的代码
如果是用brew装的Python,直接重新安装并更新证书:
brew reinstall python
2. 临时禁用证书验证(仅测试用!)
如果只是临时测试不想折腾证书,可以在连接时跳过验证,但生产环境绝对不能用,风险很高:
import ssl from pymongo import MongoClient # 替换成你的Atlas连接字符串 client = MongoClient( "mongodb+srv://<你的用户名>:<你的密码>@cluster0.mongodb.net/", ssl_cert_reqs=ssl.CERT_NONE )
3. 手动指定根证书路径(稳妥的替代方案)
安装certifi包(它维护了一套完整的根证书),然后让pymongo用这个证书:
首先安装certifi:
pip install certifi
然后修改连接代码:
import ssl import certifi from pymongo import MongoClient client = MongoClient( "mongodb+srv://<你的用户名>:<你的密码>@cluster0.mongodb.net/", ssl_ca_certs=certifi.where() )
为什么Ubuntu上没问题?因为Ubuntu的Python默认会自动调用系统的根证书存储,而Mac的Python环境(尤其是系统自带的)没有把系统证书和Python的证书池打通,所以就出现了握手失败的情况。
内容的提问来源于stack exchange,提问作者Johnny John Boy
相关产品推荐
相关产品推荐

