[英]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.