Статус: Участник
Группы: Участники
Зарегистрирован: 09.12.2022(UTC) Сообщений: 22 Сказал(а) «Спасибо»: 8 раз
|
Общий привет! Работаю в Ubuntu 22, на Python 3.10. Делаю запросы в Песочницу API МДЛП Честный знак: https://api.sb.mdlp.crpt.ruГОСТ-шифры настроил, сервер принимает. Но Serever Hello приходит с сертификатом "CRYPTO-PRO Test Center 2", который я не знаю как верифицировать. В документации МДЛП в настройках для соединения с Песочницей дана ссылка на "тестовый корневой сертификат от КриптоПРро": Ссылка из документации МДЛП. Скачал certnew.cer в формате base64, в коде указываю путь на него (session.verify = './certs/certnew.cer'): Цитата: import json import requests from requests.adapters import HTTPAdapter from urllib3.util.ssl_ import create_urllib3_context
CIPHERS = 'GOST2012-GOST8912-GOST8912' BASE_URL = 'https://api.sb.mdlp.crpt.ru/api/v1/' URL_CODE = BASE_URL + 'auth'
class GOSTAdapter(HTTPAdapter): """ A TransportAdapter that re-enables 3DES support in Requests. """ def init_poolmanager(self, *args, **kwargs): context = create_urllib3_context(ciphers=CIPHERS) kwargs['ssl_context'] = context return super(GOSTAdapter, self).init_poolmanager(*args, **kwargs)
def proxy_manager_for(self, *args, **kwargs): context = create_urllib3_context(ciphers=CIPHERS) kwargs['ssl_context'] = context return super(GOSTAdapter, self).proxy_manager_for(*args, **kwargs)
session = requests.Session() session.mount('https://api.sb.mdlp.crpt.ru', GOSTAdapter())
session.verify = './certs/certnew.cer' # Если указать False - запрос проходит, данные поступают.
headers = {'Content-Type': 'application/json;charset=UTF-8'} data = { 'client_id': '***', 'client_secret': '***', 'user_id': '***', 'auth_type': 'SIGNED_CODE' } response = session.post(URL_CODE, data=json.dumps(data), headers=headers) print('code: ', response.json()['code'])
Но выходит ошибка: "requests.exceptions.SSLError: HTTPSConnectionPool(host='api.sb.mdlp.crpt.ru', port=443): Max retries exceeded with url: /api/v1/auth (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: CA signature digest algorithm too weak (_ssl.c:997)')))" То есть алгоритм дайджеста подписи CA слишком слаб. Без проверки сертификата сервера (verify=False) запрос проходит, данные поступают, но надо сделать с проверкой. Вопрос к Питонистам, кто сталкивался с такой проблемой: правильно ли я использую атрибут verify? (то, что указываю в нём путь к корневому сертификату для верификации сертификата сервера) Вопрос к КриптоПро: Известен ли Вам сертификат "CRYPTO-PRO Test Center 2"? Каким корневым сертификатом его проверять?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.12.2022(UTC) Сообщений: 22 Сказал(а) «Спасибо»: 8 раз
|
Алгоритм корневого сертификата - GOST R 34.10-2001: Цитата: openssl x509 -in ./certnew.cer -noout -text | grep Signature
Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001 Digital Signature, Certificate Sign, CRL Sign Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001
Похоже ошибка "CA signature digest algorithm too weak" вызывается по причине того, что алгоритм сертификата сервера - ГОСТ 2012 года. Как это проверить?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,731 Сказал «Спасибо»: 501 раз Поблагодарили: 2060 раз в 1599 постах
|
Автор: Baki111 Алгоритм корневого сертификата - GOST R 34.10-2001: Цитата: openssl x509 -in ./certnew.cer -noout -text | grep Signature
Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001 Digital Signature, Certificate Sign, CRL Sign Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001
Похоже ошибка "CA signature digest algorithm too weak" вызывается по причине того, что алгоритм сертификата сервера - ГОСТ 2012 года. Как это проверить? Там 2001 ГОСТ у корневого. Используйте тестовый УЦ с 2012 ГОСТ http://testgost2012.cryptopro.ru/certsrv/ |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.12.2022(UTC) Сообщений: 22 Сказал(а) «Спасибо»: 8 раз
|
Автор: Андрей * Автор: Baki111 Алгоритм корневого сертификата - GOST R 34.10-2001: Цитата: openssl x509 -in ./certnew.cer -noout -text | grep Signature
Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001 Digital Signature, Certificate Sign, CRL Sign Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001
Похоже ошибка "CA signature digest algorithm too weak" вызывается по причине того, что алгоритм сертификата сервера - ГОСТ 2012 года. Как это проверить? Там 2001 ГОСТ у корневого. Используйте тестовый УЦ с 2012 ГОСТ http://testgost2012.cryptopro.ru/certsrv/ Проверил сервер: Цитата:Certificate chain 0 s:CN = api.sb.mdlp.crpt.ru i:emailAddress = support@cryptopro.ru, C = RU, L = Moscow, O = CRYPTO-PRO LLC, CN = CRYPTO-PRO Test Center 2 a:PKEY: gost2012_512, 512 (bit); sigalg: id-GostR3411-94-with-GostR3410-2001 v:NotBefore: Dec 5 12:00:16 2022 GMT; NotAfter: Mar 5 12:10:16 2023 GMT Алгоритм серта сервера совпадает с корневым сертификатом: Цитата:Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001 Issuer: emailAddress = support@cryptopro.ru, C = RU, L = Moscow, O = CRYPTO-PRO LLC, CN = CRYPTO-PRO Test Center 2 Validity Not Before: May 27 07:24:26 2019 GMT Not After : May 26 07:34:05 2024 GMT Я не понимаю, почему не проходит верификация. Есть версия, что настройки Openssl не позволяют: пробовал в конфиге openssl.cnf поставить значение CipherString = DEFAULT:@SECLEVEL=0, никакого эффекта. Возможно, что-то ещё нужно сделать, а я не знаю об этом. Отредактировано пользователем 15 января 2023 г. 21:49:23(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close