Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
Программное подписание подписью CryptoPRO
Статус: Новичок
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,963   Сказал «Спасибо»: 602 раз Поблагодарили: 2342 раз в 1839 постах
|
Здравствуйте.
А что было изучено? Ветка по java на форуме прочитана? SDK примеры проанализированы?
Там же есть ответы... |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,963   Сказал «Спасибо»: 602 раз Поблагодарили: 2342 раз в 1839 постах
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,963   Сказал «Спасибо»: 602 раз Поблагодарили: 2342 раз в 1839 постах
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 20.10.2025(UTC) Сообщений: 6
|
Автор: Андрей * 
Там же есть ответы...
Где именно? Ветка содержит 100+ страниц Примеры, которые я нашёл, в лучшем случае используют игрушечные KeyStore, созданные в консоли для демонстрации. Где находится мой, криптопрошный KeyStore?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 20.10.2025(UTC) Сообщений: 6
|
Автор: Андрей *  samples.***
Спасибо. Не знал про это
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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 похожая строка есть в таблице "Список ключевых контейнеров пользователя" в колонке "Имя контейнера", только почему-то с обрезанным началом (Сервис - Просмотреть сертификаты в контейнере - Обзор)
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,963   Сказал «Спасибо»: 602 раз Поблагодарили: 2342 раз в 1839 постах
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 20.10.2025(UTC) Сообщений: 6
|
Автор: Андрей *  Спасибо. Но в таком случае у меня, видимо, загружается не тот 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)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 20.10.2025(UTC) Сообщений: 6
|
Автор: Андрей *  Что я придумал: 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.
У меня, как я упомянул выше, восьмая Джава Возможно, мне нужно что-то ввести здесь? Мне надо что-то купить для описанной задачи?  Отредактировано пользователем 22 октября 2025 г. 16:11:32(UTC)
| Причина: Не указана
|
|
|
|
Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
Программное подписание подписью CryptoPRO
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close