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 шт):

Автор решения: Pak Uula

Это какие-нибудь госконтрактники, которых по закону заставляют использовать российские алгоритмы шифрования? Вы в принципе не можете с ними работать без пересборки OpenSSL с поддержкой гостовых алгоритмов шифрования.

В openssl-1.1.0 поддержку ГОСТ выпилили за устарелость кода и отсутствие мейнтейнера. Есть реализация ГОСТ для 1.0.х: https://github.com/gost-engine/engine/wiki/Building

Вам нужно пересобрать openssl с поддержкой ГОСТ, только тогда вы сможете достучаться до этого сайта.

UPD. Криптопро поддерживает свой форк openssl (sic!), в котором работают гостовские шифры. У них есть сборка для Windows, для остальных платформ, я подозреваю, нужно собирать самостоятельно.

→ Ссылка