python requests как правильно подсунуть сертификат?
есть специальный урл у крипто про, для авторизаций, там получают сертификаты. дак вот я на этот урл могу попасть, только если захожу через IE, хром и фф ни в какую не показывают. говорят проблемы с сертификатом.
Сертификат я получил, пытаюсь подсунуть питону, но получаю
requests.exceptions.SSLError: HTTPSConnectionPool(host='cpca20.cryptopro.ru', port=443): Max retries exceeded with url: /ui/1/Login.aspx (Caused by SSLError(SSLError(0, u'unknown error (_ssl.c:3027)'),))
погуглил, нашел что нужно преобразовать сертификат в pem (у меня он в формате cer) преобразовал, получаю ошибку
Could not find a suitable TLS CA certificate bundle, invalid path: xxxxx
как я понял нужна цепочка сертификатов? а в файлике что получился я четко вижу 1 сертификат. где брать эту цепочку? или как то можно ее создать?
код простой, делаю так
r = requests.get('https://cpca20.cryptopro.ru/ui/1/Login.aspx', verify='файл.pem')
Ответы (1 шт):
Это какие-нибудь госконтрактники, которых по закону заставляют использовать российские алгоритмы шифрования? Вы в принципе не можете с ними работать без пересборки OpenSSL с поддержкой гостовых алгоритмов шифрования.
В openssl-1.1.0 поддержку ГОСТ выпилили за устарелость кода и отсутствие мейнтейнера. Есть реализация ГОСТ для 1.0.х: https://github.com/gost-engine/engine/wiki/Building
Вам нужно пересобрать openssl с поддержкой ГОСТ, только тогда вы сможете достучаться до этого сайта.
UPD. Криптопро поддерживает свой форк openssl (sic!), в котором работают гостовские шифры. У них есть сборка для Windows, для остальных платформ, я подозреваю, нужно собирать самостоятельно.