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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Nad.Chel  
#1 Оставлено : 20 октября 2025 г. 17:06:39(UTC)
Nad.Chel

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

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

Я действующий Java-разработчик. Хочу освоить электронное подписание, которое используется в нашем коммерческом проекте.

Ранее я не имел дело с электронным подписанием.

У меня есть:

1. Флэшка со следующими файлами (у меня действующая настоящая электронная подпись от КриптоПро)
* header.key
* masks.key
* masks2.key
* name.key
* primary.key
* primary2.key
2. Java 8.
3. BouncyCastle.
4. Приложение КриптоПро CSP (возможно, может пригодиться косвенно)

Я хочу попытаться программно подписать простой текстовый файл. То есть получить файл с расширением .sig.

Насколько я понял, мне нужно получить экземпляр KeyStore, чтобы получить из него экземпляр PrivateKey, который потом передать в initSign() экземпляра Signature — чтобы затем на этом экземпляре уже наконец вызвать sign(). Я не очень понимаю, как мне получить KeyStore и где находится этот файл. Находится ли он среди перечисленных выше?

Как мне осуществить электронное подписание?

Отредактировано пользователем 20 октября 2025 г. 17:50:52(UTC)  | Причина: Не указана

Offline Андрей *  
#2 Оставлено : 20 октября 2025 г. 17:47:12(UTC)
Андрей *

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

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

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

А что было изучено?
Ветка по java на форуме прочитана?
SDK примеры проанализированы?

Там же есть ответы...
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#3 Оставлено : 20 октября 2025 г. 17:49:04(UTC)
Андрей *

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

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

Сказал «Спасибо»: 602 раз
Поблагодарили: 2342 раз в 1839 постах



Форум КриптоПро » Средства криптографической защиты информации » КриптоПро JCP, JavaTLS

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#4 Оставлено : 20 октября 2025 г. 17:55:34(UTC)
Андрей *

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

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

Сказал «Спасибо»: 602 раз
Поблагодарили: 2342 раз в 1839 постах
https://cryptopro.ru/products/csp/jcp/downloads

в архиве:

/jcp-2.0.хххх/
samples.***
/javadoc/CAdES-javadoc.jar
Техническую поддержку оказываем тут
Наша база знаний
Offline Nad.Chel  
#5 Оставлено : 20 октября 2025 г. 17:59:29(UTC)
Nad.Chel

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

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

Автор: Андрей * Перейти к цитате


Там же есть ответы...


Где именно?

Ветка содержит 100+ страниц

Примеры, которые я нашёл, в лучшем случае используют игрушечные KeyStore, созданные в консоли для демонстрации. Где находится мой, криптопрошный KeyStore?
Offline Nad.Chel  
#6 Оставлено : 20 октября 2025 г. 18:02:57(UTC)
Nad.Chel

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

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

Автор: Андрей * Перейти к цитате

samples.***


Спасибо. Не знал про это
Offline Nad.Chel  
#7 Оставлено : 21 октября 2025 г. 13:36:38(UTC)
Nad.Chel

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

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

Автор: Андрей * Перейти к цитате
https://cryptopro.ru/products/csp/jcp/downloads

в архиве:

/jcp-2.0.хххх/
samples.***
/javadoc/CAdES-javadoc.jar


1. Возможно ли подписание без compile-зависимости от специфичных для КриптоПро типов, исключительно через абстракции Java? Вижу в примерах импорты из ru.CryptoPro
2. Взял пример из SignByLoadKeyExample (из директории JCSP/Signature архива samples.jar), заменив JCSP на JCP. Положил в classpath все джары из jcp-2.0.41789, скаченного с сайта (кроме samples и джаров из папки dependencies). На вызовые KeyStore.getInstance() падает на KeyStoreException (текст ошибки типа "HDIMAGE not found"). Пробовал с другими значениеми type (первый параметр) — теми, которые перечислены в Java Cryptography Architecture. Тот же результат
Код:
        KeyStore keyStore = KeyStore.getInstance("HDIMAGE", "JCP");

3. Алиас, который мне необходимо будет указать, это строка из файла name.key? В КриптоПро CSP похожая строка есть в таблице "Список ключевых контейнеров пользователя" в колонке "Имя контейнера", только почему-то с обрезанным началом (Сервис - Просмотреть сертификаты в контейнере - Обзор)
Offline Андрей *  
#8 Оставлено : 21 октября 2025 г. 13:45:46(UTC)
Андрей *

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

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

Сказал «Спасибо»: 602 раз
Поблагодарили: 2342 раз в 1839 постах
"HDImageStore"
jcp-jcsp
Техническую поддержку оказываем тут
Наша база знаний
Offline Nad.Chel  
#9 Оставлено : 22 октября 2025 г. 12:16:23(UTC)
Nad.Chel

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

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

Автор: Андрей * Перейти к цитате
"HDImageStore"
jcp-jcsp


Спасибо. Но в таком случае у меня, видимо, загружается не тот KeyStore. Проверил, выполнив в дебаге keyStoreSpi.engineAliases() — возвращаемый алиас относится к истекшей подписи (я действительно такой создавал несколько месяцев назад). Возможно, это KeyStore с диска компьютера

Если я правильно понимаю, то, что у меня на флешке — это тоже KeyStore, и вернуть нужно именно его. Ведь активный сертификат именно там

Если так, как это сделать?

Файлы с флешки, перечисленные выше, хранятся в директории с определённым именем (последовательность цифр). Может, нужно как-то использовать ту строку?
Код:
        KeyStore keyStore = KeyStore.getInstance("HDImageStore", "JCP");
        keyStore.load(null, null);
        String alias = stringFromNameDotKeyFile;
        KeyStore.PasswordProtection passwordProtection = new KeyStore.PasswordProtection(password.toCharArray());
        KeyStore.Entry entry = keyStore.getEntry(alias, passwordProtection); // null 


Возможно, мне нужно сперва переместить этот KeyStore с флешки туда же, где находится найденный контейнер, в какое-то локальное хранилище? Я пробовал импортировать его через КриптоПро CSP: как через кнопку Установить (Сервис - Сертификаты в контейнере закрытого ключа), так и вручную в Личное - Реестр через Мастер импорта сертификатов

Отредактировано пользователем 22 октября 2025 г. 15:03:19(UTC)  | Причина: Не указана

Offline Nad.Chel  
#10 Оставлено : 22 октября 2025 г. 15:44:11(UTC)
Nad.Chel

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

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

Автор: Андрей * Перейти к цитате
"HDImageStore"
jcp-jcsp


Что я придумал:

1. Скопипастил директорию с упомянутыми файлами в %USERPROFILE%\AppData\Local\Crypto Pro
2. Дебажно узнал алиас контейнера. Это не то же самое, что содержимое name.key (хоть и похоже). Интересно, как можно узнать алиас нормальным способом?

Но теперь я получаю какую-то криптопрошную ошибку об истекшей лицензии на вызове keyStore.getEntry(). О какой лицензии идёт речь и как это исправить?

Код:
Caused by: ru.CryptoPro.JCP.tools.LicenseException: Лицензия истекла
	at ru.CryptoPro.JCP.tools.License.check(Unknown Source)
	at ru.CryptoPro.JCP.tools.AbstractLicense.check(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.cl_5.run(Unknown Source)
	... 79 more


Вот здесь я нашёл следующее:

Цитата:
Предположительно, Вы активировали лицензию КриптоПро JCP для одного пользователя, а код выполняется от другого пользователя.

В сборках JCP с литерой A (для Java 10+) есть особенность, что лицензия должна быть активирована для того пользователя, который использует JCP.


У меня, как я упомянул выше, восьмая Джава

Возможно, мне нужно что-то ввести здесь? Мне надо что-то купить для описанной задачи?

÷ñÒ1131324425êÖ28õæ÷Настройки КриптоПро JCP - JCP - Ввод лицензии÷ñÒ1131324425êÖ29õæ÷

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

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