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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline maximkosheev  
#1 Оставлено : 5 ноября 2018 г. 18:40:09(UTC)
maximkosheev

Статус: Активный участник

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

Сказал(а) «Спасибо»: 4 раз
Добрый день.
В системе, которую мы используем нет возможности использовать КРИПТОПРО Browser Plugin.
Нужно на java написать программу, которая повторяет его работу КриптоПРО Browser Plugin.
Скрипт, на web странице работает с плагином через технологию COM, использовать на Java эту технологию не хотелось бы (решение должно быть кроссплатформным).
Какой наиболее правильный путь решить эту задачу?
ps. У нас есть возможность поставить JCP.
Offline Максим Коллегин  
#2 Оставлено : 5 ноября 2018 г. 19:45:56(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,374
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 704 раз в 613 постах
Открывать документацию и писать. Но плагин - это технология для браузеров, кстати кроссплатформенная. А зачем вам аналог на Java? Для выполнения криптографических операций в Java много собственных классов.
Знания в базе знаний, поддержка в техподдержке
Offline maximkosheev  
#3 Оставлено : 5 ноября 2018 г. 20:18:08(UTC)
maximkosheev

Статус: Активный участник

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

Сказал(а) «Спасибо»: 4 раз
Нужно именно использовать ЭЦП. Плагин прекрасно справляется с задачей, но, повторюсь, мы не можем его использовать. Нужно на выходе работы моей программы получить точно такой же результат, который получается плагином. Я использую для этих целей JCP и в частности "модуль" CAdES. Для проверки собрал пример SignExample (со своими настройками: alias, keystore type, provider и пр.).
На вход программе и плагину подаю один и тот же массив байт, но на выходе получаю разный результат. Помогите, пожалуйста, разобраться... Какие данные нужно предоставить, чтобы помощь была эффективной?
Offline basid  
#4 Оставлено : 6 ноября 2018 г. 10:28:39(UTC)
basid

Статус: Активный участник

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

Сказал(а) «Спасибо»: 7 раз
Поблагодарили: 140 раз в 126 постах
Учитываете, что при формировании ЭП к данным добавляется т.н. имитовставка и две подписи "одного и того же" дадут на выходе "разный набор байт"?
Offline maximkosheev  
#5 Оставлено : 6 ноября 2018 г. 19:23:57(UTC)
maximkosheev

Статус: Активный участник

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

Сказал(а) «Спасибо»: 4 раз
Автор: basid Перейти к цитате
две подписи "одного и того же" дадут на выходе "разный набор байт"

Согласен с вами. Подписывая одну и ту же последовательность байт плагином CAdESCOM мы получаем разную последовательность байт, но всегда одной длины.
А выполняя подпись классом CAdESSignature из пакета ru.CryptoPro.CAdES.CAdESSignature я получаю подпись совсем другой длины. И вот хотелось бы понять, что нужно сделать в Java, чтобы подпись получилась аналогичная плагину. Может быть плагин подписывает какие-то дополнительные атрибуты...

Вот буквально как работает скрипт, использующий плагин:

Код:

var store = yield createObject("CAdESCOM.Store");
var certificate = yield certificatePromise;

yield store.Open(constants.CAPICOM_CURRENT_USER_STORE, constants.CAPICOM_MY_STORE, constants.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

var certificates = yield store.Certificates;
var oCertificates = yield certificates.Find(constants.CAPICOM_CERTIFICATE_FIND_SHA1_HASH, certificate.Hash);

if (yield oCertificates.Count == 0) {
	throw new Error("Certificate not found");
}

var oCertificate = yield oCertificates.Item(1);

var signer = yield createObject("CAdESCOM.CPSigner");
yield signer.propset_Certificate(oCertificate);

var oSignedData = yield createObject("CAdESCOM.CadesSignedData");

oSignedData.propset_ContentEncoding(constants.CADESCOM_BASE64_TO_BINARY);
oSignedData.propset_Content(content);
signer.propset_Options(constants.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY);
var sSignedMessage = yield oSignedData.SignCades(signer, constants.CADES_BES, isDetached);

Никаких тут "особенностей" нет.
Да, я понимаю, что указывая кодировку CADESCOM_BASE64_TO_BINARY, реально плагин будет подписывать не ту последовательность байт, что мы передали как content, а ее расшифрованный вариант, а затем получившуюся подпись снова шифрует Base64.
Offline two_oceans  
#6 Оставлено : 9 ноября 2018 г. 10:33:10(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Мотивация вопроса несколько странная - очень сомнительно, что браузеры кроме Internet Explorer используют ActiveX и полноценный COM для работы с плагином. То есть реализация "не для IE" по идее не использует COM и должна быть кроссплатформенна. Впрочем, не стану отговаривать реализовать то же самое, "но в профиль".

По вопросу - если получаются данные разной длины, то скорее всего действительно подписывается разное количество свойств, например включены дополнительные сертификаты, исходные данные, штамп времени и т.д. В кодированном base64 виде объем данных увеличивается примерно на 1/3, при сравнении размера это нужно учитывать.

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