我有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...
)
但是,如果您对证书的了解更深,他们会提供任何帮助!