簡體   English   中英

使用 Djongo Connector 將 Django 連接到 MongoDB 引發 SSL 握手異常

[英]Connecting Django to MongoDB using Djongo Connector throws SSL Handshake exception

我正在嘗試從我的 django 應用程序連接到 MongoDb,但它拋出

[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)異常。

這與 pymongo 在我連接到 MongoDB 時拋出的異常相同,但是我可以通過在連接 uri 的末尾附加&ssl_cert_reqs=CERT_NONE來使連接正常工作。 基本上,我試圖連接的 MongoDb 已經在其中實現了 ssl,我不想通過證書來獲得連接。

但是,在 dango 中,它希望我們在 settings.py 文件的數據庫配置部分中傳遞鍵值對字典。

我嘗試從我的應用程序中指定相同的'SSL':True,'SSL_CERT_REQS':'CERT_NONE'連接設置,但它不斷拋出相同的異常。

非常感謝任何幫助,如何配置證書或只是繞過客戶端的證書檢查以使連接正常工作。 謝謝 !

文件下djongo代碼的限制:'<>\\Lib\\site-packages\\djongo\\base.py'

    def get_connection_params(self):
    """
    Default method to acquire database connection parameters.

    Sets connection parameters to match settings.py, and sets
    default values to blank fields.
    """
    valid_settings = {
        'NAME': 'name',
        'HOST': 'host',
        'PORT': 'port',
        'USER': 'username',
        'PASSWORD': 'password',
        'AUTH_SOURCE': 'authSource',
        'AUTH_MECHANISM': 'authMechanism',
        'ENFORCE_SCHEMA': 'enforce_schema',
        'REPLICASET': 'replicaset',
        'SSL': 'ssl',
        'SSL_CERTFILE': 'ssl_certfile',
        'SSL_CA_CERTS': 'ssl_ca_certs',
        'READ_PREFERENCE': 'read_preference'
    }
    connection_params = {
        'name': 'djongo_test',
        'enforce_schema': True
    }
    for setting_name, kwarg in valid_settings.items():
        try:
            setting = self.settings_dict[setting_name]
        except KeyError:
            continue

        if setting or setting is False:
            connection_params[kwarg] = setting

    return connection_params

在上面的代碼中,valid_settings 字典應該還有一個鍵值對,即“SSL_CERT_REQS”:“ssl_cert_reqs”。

此外,由於 ssl.CERT_NONE 是 0(IntEnum 中的第一個序數),所以我們需要再添加一個 or 條件 'setting == 0' with 'setting or setting is False'

您可以手動添加這一行,如果您在設置的 DATABASES 的默認字典中添加以下行,它應該可以正常工作:'SSL_CERT_REQS':ssl.CERT_NONE,

所以最終更新的方法如下:

def get_connection_params(self):
    """
    Default method to acquire database connection parameters.

    Sets connection parameters to match settings.py, and sets
    default values to blank fields.
    """
    valid_settings = {
        'NAME': 'name',
        'HOST': 'host',
        'PORT': 'port',
        'USER': 'username',
        'PASSWORD': 'password',
        'AUTH_SOURCE': 'authSource',
        'AUTH_MECHANISM': 'authMechanism',
        'ENFORCE_SCHEMA': 'enforce_schema',
        'REPLICASET': 'replicaset',
        'SSL': 'ssl',
        'SSL_CERTFILE': 'ssl_certfile',
        'SSL_CA_CERTS': 'ssl_ca_certs',
        'READ_PREFERENCE': 'read_preference',
        'SSL_CERT_REQS': 'ssl_cert_reqs'
    }
    connection_params = {
        'name': 'djongo_test',
        'enforce_schema': True
    }
    for setting_name, kwarg in valid_settings.items():
        try:
            setting = self.settings_dict[setting_name]
        except KeyError:
            continue

        if setting or setting is False or setting == 0:
            connection_params[kwarg] = setting

    return connection_params

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM