У меня есть 2 приложения Django, с которыми мне нужно общаться друг с другом через DjangoRestFramework. Приложения работают на серверах Windows, на которых работает Apache для обслуживания данных.
Они живут в отдельных блоках в моей инфраструктуре, и здесь мы используем самоподписанный сертификат для внутренних вещей, потому что это требование.
Когда я пытаюсь сделать запрос, он расстраивается из-за самоподписанного сертификата в цепочке и не завершает запрос.
Я сделал небольшую служебную функцию, которая обращается к 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
, и вызов не будет завершен.
Общий макет выглядит следующим образом:
Сервер1: https - самоподписанный (server1.cer
(выполнение вызова))
Сервер2: 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...
)
Но любая помощь от людей, которые знают сертификаты немного лучше, приветствуется!