由于链中的自签名证书,因此无法将DjangoRestFramework与请求一起使用

时间:2019-05-07 16:00:31

标签: python django ssl django-rest-framework python-requests

我有2个Django应用程序,我需要通过DjangoRestFramework相互通信。这些应用程序运行在运行Apache的Windows服务器上以提供数据。

它们生活在我的基础架构中的单独盒子上,在这里我们对内部事物使用自签名证书,因为这是必需的。

当我尝试发出请求时,它在链中带有自签名证书,因此不满意。

我做了一个实用程序功能,可以扩展到API:

def get_future_assignments(user_id):
    """gets a users data from the API

    Arguments:
        user_id {int} -- user_id for a User
    """
    headers = {
        'User-Agent': 'Mozilla/5.0',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'X-Requested-With': 'XMLHttpRequest'
        }
    api_app = settings.MY_API
    api_model = 'api_endpoint/'
    api_query = '?user_id='+str(user_id)
    json_response = requests.get(
        api_app+api_model+api_query,
        headers=headers,
        verify=False
    )
    return json.loads(json_response.content)

使用verify=False允许端点运行并返回适当的数据。如果我删除该消息,它将无法说出一个self-signed-cert in the chain并且无法结束通话。

总体布局如下:

Server1:https-自签名(server1.cer(进行呼叫))

Server2:https-自签名(server2.cer(API位于此服务器上))

我拥有安装在浏览器等组织(rootcert.cer)中的根证书。

我不太熟悉证书,因此我不确定应该在请求中发送哪些证书。

我知道有一个cert参数可以在请求中使用-但我不确定要在其中添加什么。

我很确定我会需要这样的东西:

json_response = requests.get(
    api_app+api_model+api_query,
    headers=headers,
    cert= our_cert, # not sure which cert this would be...
    key= our_root_ca # do I need this? Not sure...
)

但是,如果您对证书的了解更深,他们会提供任何帮助!

0 个答案:

没有答案