使用 python 在 cosmosdb mongo api 中 SSL 握手失败

问题描述 投票:0回答:1

我正在尝试连接 azure cosmos 中的数据库,该数据库使用 Python 中的 Mongo DB API。当我创建客户端时,我得到

SSL handshake failed error
,但我不知道如何解决它。我知道有一些线程讨论了这个问题,并且我已将其建议添加到我的代码中,但是我无法使其工作。

我在创建客户端时添加了

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 server version 4.2

azure azure-cosmosdb pymongo azure-cosmosdb-mongoapi ssl-handshake
1个回答
1
投票

我已经成功解决了这个问题。如果您使用公司网络,出于安全原因,他们会关闭一些端口。就我而言,出于安全原因,端口 10255 被关闭,并且客户端配置良好。

对我有帮助的链接

© www.soinside.com 2019 - 2024. All rights reserved.