mongodb - 如何在我的 Macbook Air 上通过 Python 3.6 连接到 MongoDB Atlas 而不会出现 SSL 握手错误?

标签 mongodb macos ssl pymongo mongodb-atlas

我已经设置了一个测试 MongoDb Atlas 帐户,只是免费帐户之一,在我的 Ubuntu 机器上使用以下代码我可以成功创建用户并搜索他们。

当我在我的 MacBook Air 上尝试完全相同的操作时,我得到了如下所示的 SSL 握手。

pymongo.errors.ServerSelectionTimeoutError: SSL handshake failed: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833),SSL handshake failed: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833),SSL handshake failed: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)

import pymongo
client = pymongo.MongoClient("mongodb+srv://MYUSERNAME:MYPASSWORD@cluster0-ABCDEF.mongodb.net/test")
db = client.johnny
collection = db.myjohnnytest

example = {'name' : 'Johnny',
            'email' : 'johnny@test.net'}

user_id = collection.insert_one(example).inserted_id

我发现这个答案似乎是关键:

Stack Overflow Answer

但我已经尝试过这个,无论我完全按照它还是激活我的 virtualenv,我都会收到以下错误:

Could not find an activated virtualenv (required). Traceback (most recent call last): File "", line 44, in File "", line 25, in main File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py", line 291, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command '['/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6', '-E', '-s', '-m', 'pip', 'install', '--upgrade', 'certifi']' returned non-zero exit status 3. logout Saving session... ...copying shared history... ...saving history...truncating history files... ...completed.

最佳答案

默认情况下,PyMongo 配置为在启用 TLS 时需要来自服务器的证书。这可以使用 ssl_cert_reqs 选项进行配置。要禁用此要求,请将 ssl.CERT_NONE 作为关键字参数传递:

>>> uri = 'mongodb://example.com/?ssl=true&ssl_cert_reqs=CERT_NONE'
>>> client = pymongo.MongoClient(uri)

关于mongodb - 如何在我的 Macbook Air 上通过 Python 3.6 连接到 MongoDB Atlas 而不会出现 SSL 握手错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50155409/

相关文章:

javascript - Node.js - 不是函数

javascript - 在 meteor 中使用mongo聚合来总计解锁/锁定集合

linux - grails 项目建立在 mac 而不是 linux 上

macos - 如何将 Virtual Box mac OS Big Sur 更改为不同的屏幕分辨率(尺寸),包括 1366x768?

ssl - 是否可以识别 TLS 信息。在请求响应中?

ajax - 在 Apache 服务器上启用 ssl 后 AJAX POST 请求出现错误 301

javascript - $push value to array with mongoose 只有当键存在时

node.js - 如何显示来自 mongodb 的无限嵌套注释

objective-c - 如何在 OS X 上以编程方式运行具有低 IO 优先级和高 niceness 值的命令

.net - .NET 4 是否更改了证书请求框架在 TLS 中的应答方式