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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Koblyakov.slava  
#1 Оставлено : 5 августа 2020 г. 11:51:39(UTC)
Koblyakov.slava

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

Группы: Участники
Зарегистрирован: 07.07.2020(UTC)
Сообщений: 19

Сказал(а) «Спасибо»: 1 раз
Доброго дня.
Нам необходимо сформировать алгоритм подписи запроса в формате PKCS#7 detached signature в кодировке UTF-8 от 4-х параметров запроса.
На данном ресурсе был найден удовлетворяющий требованиям код, но формируемая им подпись не верифицируется принимающей стороной, которая возвращает ошибку: The signature in client secret parameter was not verified.

Вопрос: Каким образом можно проверить подписывающий алгоритм? Какие нибудь идеи или комментарии?
Ниже под сполером сам алгоритм.
В архивах тестовые ключи и сертификаты и сам тестовый проект.

Наш стенд:
Java 13:
Лицензионный jcp-2.0.41664-A:


Offline two_oceans  
#2 Оставлено : 5 августа 2020 г. 12:53:34(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 395 раз в 366 постах
Добрый день.
Архивов что-то не вижу. На первый взгляд вроде бы похоже на правильный код, хотя конкретно авторизацией ЕСИА я не занимался, возможно там какие-то нюансы. Там точно надо собирать CMS? Бросилось в глаза что несколько sign - и метод и массив и signature.sign, да и вообще много что в переменных/методах отличается только регистром. Вроде как и не ошибка, но рискованно так писать.

Код:
return CMSSign(data, privateKey, cert, false);
Однако больше всего подозрительно, что передаете в данной строке в параметр detached значение false и ожидаете получить отсоединенную подпись. Если код верный, то туда надо передать true для получения отсоединенной подписи.

Отредактировано пользователем 5 августа 2020 г. 12:59:55(UTC)  | Причина: Не указана

Offline Koblyakov.slava  
#3 Оставлено : 5 августа 2020 г. 14:17:12(UTC)
Koblyakov.slava

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

Группы: Участники
Зарегистрирован: 07.07.2020(UTC)
Сообщений: 19

Сказал(а) «Спасибо»: 1 раз
Добавил архивы с проектом и тестовыми сертификатами, ключами Sert_key_dataRequest_errdataResponse.zip (10kb) загружен 9 раз(а). authEsia.zip (20kb) загружен 8 раз(а).

Автор: two_oceans Перейти к цитате

Там точно надо собирать CMS?


Я считал, что CMS обязательна для подписи в формате PKCS#7 на фрейморке jcp.
Offline Koblyakov.slava  
#4 Оставлено : 7 августа 2020 г. 11:56:06(UTC)
Koblyakov.slava

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

Группы: Участники
Зарегистрирован: 07.07.2020(UTC)
Сообщений: 19

Сказал(а) «Спасибо»: 1 раз
Автор: two_oceans Перейти к цитате

Однако больше всего подозрительно, что передаете в данной строке в параметр detached значение false и ожидаете получить отсоединенную подпись.


Верно, поправил, но не полегчало. (


Попробовал другим способом с помощью командной строки. Результат тот же.
Код:
cryptcp.x64 -signf -der -strict -cert -detached -thumbprint "d45c892fbda933e0c0c3e0b55d5a5b3a2355f323" -pin "1234567890" messagestr.txt

В чем то ошибаюсь, но понять не могу.


Offline two_oceans  
#5 Оставлено : 7 августа 2020 г. 13:18:25(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 395 раз в 366 постах
Сравнил что в архиве со парой статей.

Запрос отличается от второй статьи, тем что для redirect_url в архиве не выполнено urlencode. Еще там до кучи запихали openid в scope, не знаю влияет ли на что. В первой еще и плюсики в строке запроса заменили на %2b (так двойное кодирование может выйти) и подписываемую строку кодировали в UTF-8 (но русских букв в ней ведь нет?)

Для ручной сборки CMS с гост еще возможно надо перевернуть значение подписи (которое byte[] sign), поэтому наверно надо отработать версию с urlencode на полученной подписи из утилиты, не забывая закодировать base64 и заменить плюсики и равно, а уж потом смотреть по сборке.

Отредактировано пользователем 7 августа 2020 г. 13:21:34(UTC)  | Причина: Не указана

Offline Koblyakov.slava  
#6 Оставлено : 7 августа 2020 г. 17:24:31(UTC)
Koblyakov.slava

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

Группы: Участники
Зарегистрирован: 07.07.2020(UTC)
Сообщений: 19

Сказал(а) «Спасибо»: 1 раз
Автор: two_oceans Перейти к цитате
поэтому наверно надо отработать версию с urlencode на полученной подписи из утилиты, не забывая закодировать base64 и заменить плюсики и равно, а уж потом смотреть по сборке.


Убрал из команды утилиты ключ -der, теперь подпись формируется в base64, по умолчаню.

Код:
Runtime.getRuntime().exec(new String[]{"cmd.exe","/c","start cryptcp.x64 -signf -strict -cert -detached -thumbprint \"d45c892fbda933e0c0c3e0b55d5a5b3a2355f323\" -pin \"1234567890\" messagestr.txt"});


Тут сама утилита которую кладу в корень проекта
www.cryptopro.ru/sites/default/files/private/csp/50/11823/cryptcp.x64.exe


Под сполером листинг в котором вызываю утилиту не руками, а программно.


Результат опять не радует ((
Всё та же ошибка ESIA-007005: The client is not authorized to request an access token using this method. Brick wall

Offline Санчир Момолдаев  
#7 Оставлено : 10 августа 2020 г. 7:58:40(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 100 раз
Поблагодарили: 274 раз в 254 постах
Добрый день!
а что у вас в
Цитата:
new String[]{"cmd.exe","/c","start cryptcp.x64 -signf -strict -cert -detached -thumbprint \"d45c892fbda933e0c0c3e0b55d5a5b3a2355f323\" -pin \"1234567890\" messagestr.txt"}

мне кажется там будет вывод информации о подписании, но не сама подпись
Техническую поддержку оказываем тут
Наша база знаний
Offline Koblyakov.slava  
#8 Оставлено : 10 августа 2020 г. 14:14:28(UTC)
Koblyakov.slava

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

Группы: Участники
Зарегистрирован: 07.07.2020(UTC)
Сообщений: 19

Сказал(а) «Спасибо»: 1 раз
Автор: Санчир Момолдаев Перейти к цитате

мне кажется там будет вывод информации о подписании, но не сама подпись

Нет там сама подпись на выходе.

Но ошибку я нашёл - она закралась в формате формирования даты.

Спасибо, всем кто смотрел и помог советом!!

Тему можно закрыть как решенную.

Offline Kirill Volkov  
#9 Оставлено : 26 февраля 2021 г. 9:50:26(UTC)
Kirill Volkov

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

Группы: Участники
Зарегистрирован: 13.01.2021(UTC)
Сообщений: 1
Беларусь

Base64.encodeBase64URLSafeString(sign(GetCertificateFromPersonalStore(),(AUTH_SCOPE + timestamp + clientId + state).getBytes(StandardCharsets.UTF_8)))
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.