我正在尝试连接 azure cosmos 中的数据库,该数据库使用 Python 中的 Mongo DB API。当我创建客户端时,我收到 SSL 握手失败错误
,但我不知道如何解决它。我知道有一些线程讨论了这个问题,并且我已将其建议添加到我的代码中,但是我无法使其工作。
我在创建客户端时添加了tlsCAFile=certifi.where()
,但一直无法解决。我见过有人推荐 ssl_cert_reqs=ssl.CERT_NONE
或 tlsAllowInvalidCertificates=True
,但我不想消除问题并失去安全性。此外,即使假设安全损失,我也无法使其发挥作用。
我依靠此 Azure Cosmos 帮助页面来创建我的客户端。我已经配置了环境变量。
这是我的代码总结:
import getpass
import certifi
import pymongo
import os
import sys
import pymongo
from dotenv import load_dotenv
from random import randint
#[...]
def main():
"""Connect to the API for MongoDB, create DB and collection, perform
CRUD operations
"""
# Variable for resource group name
load_dotenv()
CONNECTION_STRING = os.environ.get("COSMOS_CONNECTION_STRING")
client = pymongo.MongoClient(CONNECTION_STRING,tls=True,tlsCAFile=certifi.where())
for prop, value in vars(client.options).items():
print("Property: {}: Value: {} ".format(prop, value))
try:
client.server_info() # validate connection string
except pymongo.errors.ServerSelectionTimeoutError:
raise TimeoutError(
"Invalid API for MongoDB connection string \
or timed out when attempting to connect"
)
collection = create_database_unsharded_collection(client)
document_id = insert_sample_document(collection)
read_document(collection, document_id)
update_document(collection, document_id)
delete_document(collection, document_id)
if __name__ == "__main__":
main()
欢迎任何帮助,提前非常感谢。我也有这个问题Microsoft Q&A
编辑:我正在公司的网络上工作,我了解到这可能会导致问题。这可能与我的问题有关吗?
我有 python (3.8.5)
、python-dotenv (1.0.0)
、certifi (2020.6.20)
、pymongo(4.4.1)
,dnspython(2.4.2)
。 MongoDB 服务器版本 4.2
。
最佳答案
我已经成功解决了这个问题。如果您使用公司网络,出于安全原因,他们会关闭一些端口。就我而言,出于安全原因,端口 10255 被关闭,并且客户端配置良好。
关于azure - 使用 python 的 cosmosdb mongo api 中的 SSL 握手失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76915252/