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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline dmyudin  
#1 Оставлено : 10 ноября 2020 г. 14:41:41(UTC)
dmyudin

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

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

Сказал(а) «Спасибо»: 3 раз
Добрый день.
Сразу скажу, что в сертификатах, подписях, шифровании я - нуб. Поэтому, возможно, элементарная скорее всего задача ставит меня третий день в тупик. Поэтому пишу сюда - вдруг кто поможет.

Для работы с API "Честный знак" требуется токен. Чтобы его получить, необходимо "подписать" строку, которую он выдает при отправке запроса на авторизацию, а затем отправить ее в тебе запроса POST обратно. Тогда вернётся токен и можно будет некоторое время использовать его API.
Проблема именно в "подписании" этой строки програмно (не через плагин браузера). Работать в результате должно на виндовом сервере, сейчас разработку веду под Win10.

Сертификат присутствует, через плагин браузера строка авторизации подписывается и затем воспринимается API ЧЗ. Т.е. тут всё ок.

Путем гугления и изучения сайта Крипто-Про я набрел на руководство разработчика - http://cpdn.cryptopro.ru
Оттуда я пробовал сначала примеры из "КриптоПро ЭЦП (Интерфейс COM)". Но не продвинулся из-за ошибки (при присвоении объекту CAdESCOM.CPSigner свойства Certificate ошибка "Член группы не найден. (Исключение из HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND)"
Затем я пробовал собрать программу на примерах из "КриптоПро.NET". Там строка как-то подписывается, но результат на выходе очень сильно отличается от того, что возвращает браузер...

Направьте меня плз, в какую сторону мне копать, чтобы получить наконец от ЧЗ токен.
Я просмотрел "по-диагонали" этот форум, но есть сообщения, которые датируются 12-летней давностью, 5-летней... Не понятно, какой API сейчас актуальный, актуальны ли примеры из документации разработчика.

Спасибо!
Offline Андрей *  
#2 Оставлено : 10 ноября 2020 г. 14:49:49(UTC)
Андрей *

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

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

Сказал «Спасибо»: 372 раз
Поблагодарили: 1483 раз в 1144 постах
Здравствуйте.

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

Затем я пробовал собрать программу на примерах из "КриптоПро.NET". Там строка как-то подписывается, но результат на выходе очень сильно отличается от того, что возвращает браузер...


И не проверили, принимает ли ЧЗ такой вариант...?

Разница - из-за цепочки сертификатов, к примеру, если речь о размере.
И всегда будет разная подпись для одного и того же набора байт на подпись - это специфика ГОСТ-а.
Техническую поддержку оказываем тут
Наша база знаний
Offline dmyudin  
#3 Оставлено : 10 ноября 2020 г. 15:00:42(UTC)
dmyudin

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

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

Сказал(а) «Спасибо»: 3 раз
Не проверял. Слишком разные наборы символов.
Плагин возвращает набор строк, состоящих из латинских символов.
plugin_sign.png (36kb) загружен 15 раз(а).

Программа на NET возвращает кириллицу вперемешку с знаками вопроса и проч.
program_sign.png (28kb) загружен 14 раз(а).
Offline Андрей *  
#4 Оставлено : 10 ноября 2020 г. 15:01:54(UTC)
Андрей *

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

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

Сказал «Спасибо»: 372 раз
Поблагодарили: 1483 раз в 1144 постах
Автор: dmyudin Перейти к цитате
Не проверял. Слишком разные наборы символов.
Плагин возвращает набор строк, состоящих из латинских символов.
plugin_sign.png (36kb) загружен 15 раз(а).

Программа на NET возвращает кириллицу вперемешку с знаками вопроса и проч.
program_sign.png (28kb) загружен 14 раз(а).


Плагин дополнительно кодирует ЭП в base64.
Техническую поддержку оказываем тут
Наша база знаний
Offline dmyudin  
#5 Оставлено : 10 ноября 2020 г. 15:03:52(UTC)
dmyudin

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

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

Сказал(а) «Спасибо»: 3 раз
То есть путь через КриптоПро.Net правильный и я просто забыл закодировать в base64?
Offline Андрей *  
#6 Оставлено : 10 ноября 2020 г. 15:09:04(UTC)
Андрей *

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

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

Сказал «Спасибо»: 372 раз
Поблагодарили: 1483 раз в 1144 постах
Автор: dmyudin Перейти к цитате
То есть путь через КриптоПро.Net правильный и я просто забыл закодировать в base64?


Предлагаю закодировать и отправить, в API от ЧЗ есть подробности про формат, который ожидает сервис (DER\BASE64, присоединенная\отсоединенная).


Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
dmyudin оставлено 10.11.2020(UTC)
Offline dmyudin  
#7 Оставлено : 10 ноября 2020 г. 15:13:55(UTC)
dmyudin

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

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

Сказал(а) «Спасибо»: 3 раз
Спасибо. Это сработало.
Значит КриптоПро.NET - это правильный путь.
Offline Алексей Волгоград  
#8 Оставлено : 28 декабря 2020 г. 10:20:48(UTC)
Алексей Волгоград

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

Группы: Участники
Зарегистрирован: 24.12.2020(UTC)
Сообщений: 2
ОАЭ

Сказал(а) «Спасибо»: 1 раз
Добрый день, подскажите какие варианты возможны при получении токена доступа в честный знак. Нужно получить у них список документов. Может у кого то есть готовое решение на Delphi? Не понимаю через что и как я должен подписать запрос
Offline Андрей *  
#9 Оставлено : 28 декабря 2020 г. 11:16:01(UTC)
Андрей *

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

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

Сказал «Спасибо»: 372 раз
Поблагодарили: 1483 раз в 1144 постах
Автор: Алексей Волгоград Перейти к цитате
Добрый день, подскажите какие варианты возможны при получении токена доступа в честный знак. Нужно получить у них список документов. Может у кого то есть готовое решение на Delphi? Не понимаю через что и как я должен подписать запрос


Варианты:

CAdESCOM (установить, если нет),
CAPICOM (если нет в ОС - установить),
MS CryptoAPI 2.0

Через COM-интерфейсы - самый быстрый вариант реализации, импортировать и получить описание.

Техническую поддержку оказываем тут
Наша база знаний
Offline Алексей Волгоград  
#10 Оставлено : 28 декабря 2020 г. 11:32:31(UTC)
Алексей Волгоград

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

Группы: Участники
Зарегистрирован: 24.12.2020(UTC)
Сообщений: 2
ОАЭ

Сказал(а) «Спасибо»: 1 раз
А чисто случайно нет примера на Delphi?
Offline two_oceans  
#11 Оставлено : 28 декабря 2020 г. 12:47:04(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 77 раз
Поблагодарили: 271 раз в 255 постах
Смотря какого интерфейса.. COM у меня примера нет, делаю через низкоуровневые функции MS CryptoAPI 2.0. В принципе для данной задачи наверно подойдет и высокоуровневые функции MS CryptoAPI 2.0
Пример кода для Дельфи с использованием модуля JwaWinCrypt (модуль импортирует кучу заголовков из библиотек, желательно скачать версию модуля поновее) можно посмотреть в этой теме: https://www.cryptopro.ru...aspx?g=posts&t=17082
Вкратце, надо:
1. открыть хранилище и найти там нужный сертификат, например, по отпечатку (но можно вывести системное окно выбора сертификата пользователю). Упрощенная выдержка из кода, в buf двоичные данные отпечатка сертификата, bufLen их длина.

2. заполнить запись параметрами и передать в функцию (в примере в теме по ссылке). Разве что надо сейчас заменить алгоритм на гост-2012. Обнуление структуры обязательно ZeroMemory или FillChar, указание размера структуры обязательно, а вот везде заполнять 0 и nil после обнуления не обязательно.
3. Потом перекодировать результат в base64 (тут уж кто во что горазд, есть функция CryptBinaryToString в JwaWinCrypt, но и в самом Дельфи куча версий кодировщика)
4. Составить запрос и каким-то http компонентом отправить (опять же компонентов несколько)

Отредактировано пользователем 28 декабря 2020 г. 12:56:26(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
Алексей Волгоград оставлено 28.12.2020(UTC)
Offline YuryG  
#12 Оставлено : 24 февраля 2021 г. 12:10:19(UTC)
YuryG

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

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

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

Для работы с API "Честный знак" требуется токен. Чтобы его получить, необходимо "подписать" строку, которую он выдает при отправке запроса на авторизацию, а затем отправить ее в тебе запроса POST обратно. Тогда вернётся токен и можно будет некоторое время использовать его API.
Проблема именно в "подписании" этой строки програмно (не через плагин браузера). Работать в результате должно на виндовом сервере, сейчас разработку веду под Win10.

Сертификат присутствует, через плагин браузера строка авторизации подписывается и затем воспринимается API ЧЗ. Т.е. тут всё ок.

Путем гугления и изучения сайта Крипто-Про я набрел на руководство разработчика - http://cpdn.cryptopro.ru
Оттуда я пробовал сначала примеры из "КриптоПро ЭЦП (Интерфейс COM)". Но не продвинулся из-за ошибки (при присвоении объекту CAdESCOM.CPSigner свойства Certificate ошибка "Член группы не найден. (Исключение из HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND)"
Затем я пробовал собрать программу на примерах из "КриптоПро.NET". Там строка как-то подписывается, но результат на выходе очень сильно отличается от того, что возвращает браузер...

Направьте меня плз, в какую сторону мне копать, чтобы получить наконец от ЧЗ токен.
Я просмотрел "по-диагонали" этот форум, но есть сообщения, которые датируются 12-летней давностью, 5-летней... Не понятно, какой API сейчас актуальный, актуальны ли примеры из документации разработчика.

Спасибо!


У меня история похожая, полный нуб в теме...
Правда я не продвинулся дальше первого шага. Я безуспешно пытаюсь хотя бы вручную пройти авторизацию. Запросы отправляю через Postman.
Отправляю GET на https://elk.edo.crpt.tech/api/v1/session, затем подписываю полученную строку data тут https://www.cryptopro.ru...e/cades_bes_sample.html. Затем открываю подпись в Notepad++ , убираю /n и /r и отправляю полученную подпись на тот же https POST запросом. В ответ получаю интернал сервер еррор.
Разобрался кто-то какую сторону копать ))) ?

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

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