Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Baki111  
#1 Оставлено : 12 января 2023 г. 12:16:49(UTC)
Baki111

Статус: Участник

Группы: Участники
Зарегистрирован: 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"? Каким корневым сертификатом его проверять?
Offline Baki111  
#2 Оставлено : 13 января 2023 г. 14:43:50(UTC)
Baki111

Статус: Участник

Группы: Участники
Зарегистрирован: 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 года.
Как это проверить?
Offline Андрей *  
#3 Оставлено : 13 января 2023 г. 15:21:37(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 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/
Техническую поддержку оказываем тут
Наша база знаний
Offline Baki111  
#4 Оставлено : 15 января 2023 г. 19:32:34(UTC)
Baki111

Статус: Участник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.