PyMongo [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书

PyMongo [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate

我正在使用 Python 3.9.5 和 PyMongo 3.11.4。我的 MongoDB 数据库的版本是 4.4.6。我正在使用 Windows 8.1

我正在学习 MongoDB 并且我在 Atlas 中设置了一个我连接的集群。每当我尝试将文档插入集合时,都会引发 ServerSelectionTimeoutError ,并且在其括号内有几个 [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate.

PyMongo 文档中的

Troubleshooting TLS Errors 没有太多帮助,因为它们只为 Linux 和 macOS 用户提供了提示。

值得一提的是,如果我在初始化 MongoClient 时设置 tlsAllowInvalidCertificates=True,一切正常。这听起来很不安全,虽然我在做一个小项目,但我仍然想养成良好的习惯,不要忽视任何现有的安全措施,所以我希望有替代方案。

根据我所做的所有搜索,我猜测我丢失了某些证书,或者 Python 无法找到它们。我查看了 certifi 包,但是文档的 this 部分似乎只有在我使用 Python 2.x 时才有必要,我'我没有。

是的,我现在有点卡住了。

好吧,我最终决定安装 certifi 并且成功了。

client = MongoClient(CONNECTION_STRING, tlsCAFile=certifi.where())

希望文档在这方面更清楚一点,但也许我看起来还不够努力。

在 Flask 服务器中我通过使用解决了:

import certifi

app = Flask(__name__)
app.config['MONGO_URI'] = 
'mongodb+srv://NAME:<PWD><DBNAME>.9xxxx.mongodb.net/<db>? retryWrites=true&w=majority' 
mongo = PyMongo(app,tlsCAFile=certifi.where())
collection_name = mongo.db.collection_name