Python-запросы: передача нескольких клиентских сертификатов в session.cert - PullRequest
0 голосов
/ 08 октября 2019

Я пишу приложение Flask, которое подключается к внешней службе мыла, использующей TLS v1.2. Я использую Python 2.7 и запрашиваю библиотеку в версии 2.18.1.

Я связался с владельцем сервера, и он сказал мне, что мне нужно включить несколько клиентских сертификатов в соединение TLS. Это цепочка из 3 сертификатов, которые у меня есть в отдельных файлах .pem. (root + indermediate + мой клиентский сертификат). Сервер не впустит меня, если у меня будет только последний.

Я протестировал это с SoapUI и Wireshark, и это правда. Я получаю ответ только тогда, когда предоставляю всю цепочку из 3 сертификатов. Я получаю сообщение об ошибке от сервера при передаче только моего сертификата клиента.

Из запросов документации вы можете прочитать, что в качестве сертификата клиента вы можете передать только один сертификат, используя:

session = requests.session()
session.cert = ('/path/client_cert.pem', '/path/private_key.pem')
response = session.post(SERVICE_URL, data=XML_CONTENT, headers=HEADERS)

Я получаю сообщение об ошибке, даже если мой файл "client_cert.pem" представляет собой комплект из 3 сертификатов (так же, как вы делаете это в session.verify с сертификатами CA). На Wireshark я вижу, что только первый из них используется в соединении TLS.

Есть ли способ включить подключение нескольких сертификатов TLS в библиотеку запросов Python?

Может быть, мне следует использовать другую библиотеку илипереопределить часть его кода?

1 Ответ

0 голосов
/ 09 октября 2019

Я понял!

У меня были установлены некоторые устаревшие версии библиотеки.

Похоже, что эта проблема была исправлена ​​запросами разработчиков библиотеки в версии 1.23. Мне также пришлось обновить urllib3.

Мои текущие needs.txt :

requests==2.22.0
urllib3==1.25.2 # compatible with requests 2.22

Для следующих спецификаций все работает безупречно. Я проверил соединение TLS на Wireshark. Все сертификаты из цепочки "client_cert.pem" передаются.

Если в будущем у вас возникнут подобные проблемы, не забудьте проверить совместимость ваших запросов и версий библиотеки urllib3.

Спасиборебята!

...