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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Rainokvsy  
#1 Оставлено : 4 мая 2022 г. 17:00:08(UTC)
Rainokvsy

Статус: Новичок

Группы: Участники
Зарегистрирован: 04.05.2022(UTC)
Сообщений: 6
Российская Федерация

Сказал(а) «Спасибо»: 6 раз
Добрый день!
Имеется ресурс, общение с которым производится по средствам JWT.
Header представляет структуру Json кодированную в строку Base64.
Signature представляет закодированную в Base64 ЭП по ГОСТ 34.10-2012 строку . ЭП имеет формат «detached PKCS #7».
Для Jwt = Header.Signature
Так вот когда я беру Header и в ручную его подписываю на сайте проверки плагина
тогда формируется корректная строка и JWT токен принимается. Если же я формирую в скрипте python (как в примере), то формируется не корректно и сервис ругается на невалидность подписи.
смена pycades.CADESCOM_CADES_BES на pycades.CADESCOM_PKCS7_TYPE не помогает.
СryptoPro 5.0, python 3.8, Ubuntu 20.04

Отредактировано пользователем 4 мая 2022 г. 17:01:15(UTC)  | Причина: Не указана

Offline Санчир Момолдаев  
#2 Оставлено : 4 мая 2022 г. 17:59:01(UTC)
Санчир Момолдаев

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

Группы: Модератор, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 1,038
Российская Федерация

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 223 раз в 211 постах
Добрый день!

обратите внимание на статью
т.е. примерно так
Код:
hashedData = pycades.HashedData()
hashedData.Algorithm = pycades.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
hashedData.DataEncoding = pycades.CADESCOM_BASE64_TO_BINARY
with open('data.txt', 'rb') as binary_data_file:
    content = base64.b64encode(binary_data_file.read()).decode()
hashedData.Hash(content)
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.
Rainokvsy оставлено 19.05.2022(UTC)
Offline Rainokvsy  
#3 Оставлено : 5 мая 2022 г. 18:36:50(UTC)
Rainokvsy

Статус: Новичок

Группы: Участники
Зарегистрирован: 04.05.2022(UTC)
Сообщений: 6
Российская Федерация

Сказал(а) «Спасибо»: 6 раз
Не помогает. Различие в подписи генерируемой на сайте и при помощи модуля. Какие настройки надо указать, что бы генерировалась подпись как на сайте?
Offline Санчир Момолдаев  
#4 Оставлено : 6 мая 2022 г. 0:44:20(UTC)
Санчир Момолдаев

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

Группы: Модератор, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 1,038
Российская Федерация

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 223 раз в 211 постах
может им нужна сырая подпись RawSignature
вы пример подписи покажите какая им нужна
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.
Rainokvsy оставлено 19.05.2022(UTC)
Offline Rainokvsy  
#5 Оставлено : 6 мая 2022 г. 8:53:43(UTC)
Rainokvsy

Статус: Новичок

Группы: Участники
Зарегистрирован: 04.05.2022(UTC)
Сообщений: 6
Российская Федерация

Сказал(а) «Спасибо»: 6 раз
Header представляет структуру Json кодированную в строку Base64.
Payload – непосредственно сами данные сообщения (приведены данные для примера вида записи), представляет собой структуру XML кодированную в строку Base64.
Signature представляет закодированную в Base64 ЭП по ГОСТ 34.10-2012 строку . ЭП имеет формат «detached PKCS #7». Для Jwt "Header.Payload.Signature" подписываемая последовательность представляет собой конкатенацию части Header и Payload разделенных символом точка "Header.Payload". Разделитель "." входит в последовательность.
Вот инструкция по формированию JWT. У меня в первом запросе Payload нет, потому нужно подписать только Header.
Я перевел Header в base64, и на странице формирую подпись, там формируется так как надо:


А вот подписываемая строка
ew0KIk9ncm4iIDogIjEwMjM0MDM0NTc0MTciLA0KIktwcCIgOiAiMzQ0NDAxMDAxIg0KfQ==.
Offline Андрей *  
#6 Оставлено : 6 мая 2022 г. 9:45:47(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,630
Мужчина
Российская Федерация

Сказал «Спасибо»: 494 раз
Поблагодарили: 2034 раз в 1578 постах
Автор: Rainokvsy Перейти к цитате

А вот подписываемая строка
ew0KIk9ncm4iIDogIjEwMjM0MDM0NTc0MTciLA0KIktwcCIgOiAiMzQ0NDAxMDAxIg0KfQ==.



Почему в подписываемых данных точка в конце?
Этот JWT принимает система? Тогда авторам задайте вопрос, почему по документации написано detached, а проверяется присоединенная.


Периодически всплывают темы на форуме:
https://www.cryptopro.ru...aspx?g=posts&t=19377
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Rainokvsy оставлено 19.05.2022(UTC)
Offline Андрей *  
#7 Оставлено : 6 мая 2022 г. 9:50:09(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,630
Мужчина
Российская Федерация

Сказал «Спасибо»: 494 раз
Поблагодарили: 2034 раз в 1578 постах
Автор: Rainokvsy Перейти к цитате
Header представляет структуру Json кодированную в строку Base64.
Payload – непосредственно сами данные сообщения (приведены данные для примера вида записи), представляет собой структуру XML кодированную в строку Base64.
Signature представляет закодированную в Base64 ЭП по ГОСТ 34.10-2012 строку . ЭП имеет формат «detached PKCS #7». Для Jwt "Header.Payload.Signature" подписываемая последовательность представляет собой конкатенацию части Header и Payload разделенных символом точка "Header.Payload". Разделитель "." входит в последовательность.
Вот инструкция по формированию JWT. У меня в первом запросе Payload нет, потому нужно подписать только Header.
Я перевел Header в base64, и на странице формирую подпись, там формируется так как надо:
[SPOILER]MIIdIwYJKoZIhvcNAQcCoIIdFDCCHRA
///
А вот подписываемая строка
ew0KIk9ncm4iIDogIjEwMjM0MDM0NTc0MTciLA0KIktwcCIgOiAiMzQ0NDAxMDAxIg0KfQ==.





Цитата:
У меня в первом запросе Payload нет, потому нужно подписать только Header.

Интересная ситуация. Теперь понятно
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Rainokvsy оставлено 19.05.2022(UTC)
Offline Rainokvsy  
#8 Оставлено : 11 мая 2022 г. 10:55:46(UTC)
Rainokvsy

Статус: Новичок

Группы: Участники
Зарегистрирован: 04.05.2022(UTC)
Сообщений: 6
Российская Федерация

Сказал(а) «Спасибо»: 6 раз
Автор: Андрей * Перейти к цитате
Автор: Rainokvsy Перейти к цитате

А вот подписываемая строка
ew0KIk9ncm4iIDogIjEwMjM0MDM0NTc0MTciLA0KIktwcCIgOiAiMzQ0NDAxMDAxIg0KfQ==.



Почему в подписываемых данных точка в конце?
Этот JWT принимает система? Тогда авторам задайте вопрос, почему по документации написано detached, а проверяется присоединенная.


Периодически всплывают темы на форуме:
https://www.cryptopro.ru...aspx?g=posts&t=19377


Тему читал, не помогло.
С авторами разговаривать бесполезно, они оправляют в документацию, содержание которой я процитировал. Да я и не понимаю о чем разговаривать с людьми, которые уверенны, что корректность данных должно не из API проверять, а это моя задача и задача моей информационной системы.

Если знаете, подскажите как сформировать такую же подпись как на сайте, я уже что придумал, все перепробовал, остается только предположение что у меня что-то криво стоит. Но с другой стороны, на сайте же работает. Уже если честно не важно, atachet или detachet и каким алгоритмом о все остальное, Главное как получить туже подпись как на сайте.
Offline two_oceans  
#9 Оставлено : 11 мая 2022 г. 13:08:39(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Добрый день.
Из приложенного примера вижу, что подпись присоединенная (attached) и в ней включена вся цепочка сертификатов.
Для включения всей цепочки попробуйте для объекта Signer установить свойство Options в CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN (или значение 1).

Ключевые моменты с демостраницы можно посмотреть в исходном коде.
https://www.cryptopro.ru...s/cades/demopage/Code.js
https://www.cryptopro.ru...cades/cadesplugin_api.js

Они не особо отличаются от примера Питона (без обработки ошибок и вывода на страницу вышло примерно так, версия NPAPI), разве что используется сразу SignCades вместо сочетания HashedData и SignHash. В случае Питона ContentEncoding Content относятся к HashedData (соответственно DataEncoding и строка передаваемая в метод Hash):

Отредактировано пользователем 11 мая 2022 г. 13:13:13(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
Rainokvsy оставлено 19.05.2022(UTC)
Offline Rainokvsy  
#10 Оставлено : 16 мая 2022 г. 14:14:06(UTC)
Rainokvsy

Статус: Новичок

Группы: Участники
Зарегистрирован: 04.05.2022(UTC)
Сообщений: 6
Российская Федерация

Сказал(а) «Спасибо»: 6 раз
Не получается ничего. Я уже попробовал поместить требуемую строку в файл и подписать ее с помощью cryptcp.
Можно ли по первым знакам подписи понять какие параметры подписи?

Код:
cryptcp -sign -thumbprint 73af17e557895972b00d76967a32ecb01b6184a9 -strict -detached -addchain file


При этом в начале сформированной подписи

MIIctwYJKoZIhvcNAQcCoIIcqDCCHKQCAQExDDAKBggqhQMHAQECAjALBgkqhkiG9w0BBwGg

У корректной

MIIdIwYJKoZIhvcNAQcCoIIdFDCCHRACAQExDDAKBggqhQMHAQECAjBYBgkqhkiG9w0BBwGg

далее идут сильные отличия.

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