首页 > 解决方案 > PyMongo Mongodb SSL 错误或身份验证错误

问题描述

我正在尝试使用我创建的 mongo 数据库,但出现我无法摆脱的错误。这是我的代码:如果我只是打印集合,它工作正常

from pymongo import MongoClient
import ssl

client = MongoClient("mongodb+srv://HugoAdmin:<XXXXXXXXXXX>@personalsite-3gjka.mongodb.net/test?retryWrites=true&w=majority")
db = client.test
db = client['Site']
collection = db['BlogPosts']
print(collection)
post = {"_id": 0, "author": "Hugo Joncour", "date": "25/03/2020"}
#collection.insert_one(post)

我得到:

➜  webportfolio git:(master) ✗ Python3.6 mongo.py
Collection(Database(MongoClient(host=['personalsite-shard-00-01-3gjka.mongodb.net:27017', 'personalsite-shard-00-00-3gjka.mongodb.net:27017', 'personalsite-shard-00-02-3gjka.mongodb.net:27017'], document_class=dict, tz_aware=False, connect=True, retrywrites=True, w='majority', authsource='admin', replicaset='PersonalSite-shard-0', ssl=True), 'Site'), 'BlogPosts')

但如果我想插入帖子:

from pymongo import MongoClient
import ssl

client = MongoClient("mongodb+srv://HugoAdmin:<yvctrd6F7GUYBVYT>@personalsite-3gjka.mongodb.net/test?retryWrites=true&w=majority")
db = client.test
db = client['Site']
collection = db['BlogPosts']
#print(collection)
post = {"_id": 0, "author": "Hugo Joncour", "date": "25/03/2020"}
collection.insert_one(post)

我得到:

➜  webportfolio git:(master) ✗ Python3.6 mongo.py
Traceback (most recent call last):
  File "mongo.py", line 15, in <module>
    collection.insert_one(post)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/collection.py", line 698, in insert_one
    session=session),
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/collection.py", line 612, in _insert
    bypass_doc_val, session)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/collection.py", line 600, in _insert_one
    acknowledged, _insert_command, session)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/mongo_client.py", line 1490, in _retryable_write
    with self._tmp_session(session) as s:
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/contextlib.py", line 81, in __enter__
    return next(self.gen)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/mongo_client.py", line 1823, in _tmp_session
    s = self._ensure_session(session)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/mongo_client.py", line 1810, in _ensure_session
    return self.__start_session(True, causal_consistency=False)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/mongo_client.py", line 1763, in __start_session
    server_session = self._get_server_session()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/mongo_client.py", line 1796, in _get_server_session
    return self._topology.get_server_session()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/topology.py", line 490, in get_server_session
    None)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/topology.py", line 209, in _select_servers_loop
    self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: SSL handshake failed: personalsite-shard-00-00-3gjka.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:841),SSL handshake failed: personalsite-shard-00-02-3gjka.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:841),SSL handshake failed: personalsite-shard-00-01-3gjka.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:841)

我通过在 MongoClient() 中添加“ ssl=True, ssl_cert_reqs=ssl.CERT_NONE ”来尝试这个https://api.mongodb.com/python/current/examples/tls.html 但我得到:

➜  webportfolio git:(master) ✗ Python3.6 mongo.py
Traceback (most recent call last):
  File "mongo.py", line 15, in <module>
    collection.insert_one(post)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/collection.py", line 698, in insert_one
    session=session),
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/collection.py", line 612, in _insert
    bypass_doc_val, session)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/collection.py", line 600, in _insert_one
    acknowledged, _insert_command, session)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/mongo_client.py", line 1491, in _retryable_write
    return self._retry_with_session(retryable, func, s, None)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/mongo_client.py", line 1377, in _retry_with_session
    with self._get_socket(server, session) as sock_info:
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/contextlib.py", line 81, in __enter__
    return next(self.gen)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/mongo_client.py", line 1222, in _get_socket
    self.__all_credentials, checkout=exhaust) as sock_info:
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/contextlib.py", line 81, in __enter__
    return next(self.gen)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/pool.py", line 1138, in get_socket
    sock_info.check_auth(all_credentials)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/pool.py", line 712, in check_auth
    auth.authenticate(credentials, self)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/auth.py", line 564, in authenticate
    auth_func(credentials, sock_info)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/auth.py", line 539, in _authenticate_default
    return _authenticate_scram(credentials, sock_info, 'SCRAM-SHA-1')
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/auth.py", line 301, in _authenticate_scram
    res = sock_info.command(source, cmd)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/pool.py", line 613, in command
    user_fields=user_fields)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/network.py", line 167, in command
    parse_write_concern_error=parse_write_concern_error)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/helpers.py", line 159, in _check_command_response
    raise OperationFailure(msg % errmsg, code, response)
pymongo.errors.OperationFailure: bad auth Authentication failed.

关于如何解决这个问题的任何想法?

标签: pythonpython-3.xmongodbssl

解决方案


推荐阅读