Как я могу подключиться к MongoDB Atlas через Python 3.6 на моем Macbook Air без ошибки подтверждения связи SSL? - PullRequest
0 голосов
/ 03 мая 2018

Я настроил тестовую учетную запись MongoDb Atlas, только одну из бесплатных, и, используя приведенный ниже код в своем окне Ubuntu, я могу успешно создавать пользователей и также искать их.

Когда я пытаюсь сделать то же самое на своем MacBook Air, я получаю рукопожатие SSL, как показано ниже.

pymongo.errors.ServerSelectionTimeoutError: сбой рукопожатия SSL: сбой проверки сертификата [SSL: CERTIFICATE_VERIFY_FAILED] (_ssl.c: 833), сбой квитирования SSL: сбой проверки сертификата [SSL: CERTIFICATE_VERIFY_FAILED] (_ssl.c: 833), 8: сбой квитирования: [SSL: 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

Я нашел этот ответ, который, казалось, был ключом:

Ответ на переполнение стека

Но с тех пор я попробовал это, и точно ли я следую этому или активирую свой virtualenv, я получаю следующую ошибку:

Не удалось найти активированного virtualenv (обязательно). Traceback (последний вызов был последним): Файл "", строка 44, в Файл "", строка 25, в основном Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py", строка 291, в check_call поднять CalledProcessError (retcode, cmd) subprocess.CalledProcessError: Команда '[' /Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 ',' -E ',' -s ',' -m ',' pip ',' install ' , '--upgrade', 'certifi'] 'вернул ненулевой статус выхода 3. выйти Сохранение сессии ... ... копирование общей истории ... ... сохранение истории ... усечение файлов истории ... ... завершено.

Ответы [ 3 ]

0 голосов
/ 13 января 2019

Обновляете ли вы пакет CA для Python?

Из оболочки / терминала bash: открыть "/ Приложения / Python 3.6 / Установить Certificates.command"

или Python 3.7 и т. Д.

Документация MongoDB для Python Статья Stackoverflow для MacOS, Python и CA

0 голосов
/ 04 апреля 2019

По умолчанию PyMongo настроен на запрос сертификата с сервера, когда включен протокол TLS. Это настраивается с помощью опции ssl_cert_reqs. Чтобы отключить это требование, передайте ssl.CERT_NONE в качестве параметра ключевого слова:

>>> uri = 'mongodb://example.com/?ssl=true&ssl_cert_reqs=CERT_NONE'
>>> client = pymongo.MongoClient(uri)
0 голосов
/ 13 августа 2018

Я показываю 2 способа решения этой проблемы:

  1. (простой)

Добавление ...&ssl=true&ssl_ca_certs=/path/to/cert.pem к URL-адресу mongodb

  1. (рекомендуется)

Настройка Python SSL-соединения.

$ python3 -c "import ssl; print(ssl.get_default_verify_paths())
DefaultVerifyPaths(cafile='/Library/Frameworks/Python.framework/Versions/3.6/etc/openssl/cert.pem', capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/Library/Frameworks/Python.framework/Versions/3.6/etc/openssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/Library/Frameworks/Python.framework/Versions/3.6/etc/openssl/certs')

Затем убедитесь, что вы добавили файл cert.pem по указанному пути. В моем случае я должен добавить его в папку /Library/Frameworks/Python.framework/Versions/3.6/etc/openssl/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...