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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Jotun  
#1 Оставлено : 21 февраля 2025 г. 16:38:41(UTC)
Jotun

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

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

pom.txt (6kb) загружен 0 раз(а).Добрый день!


Помогите, пожалуйста, разрешить проблему, возникающую при работе в IntelliJ IDEA, с КриптоПро Java CSP.
Конфиг системы внизу поста. Полный pom файл во вложении.
Попробовал воспользоваться статьей на Хабре - "Java CSP быстрый старт". Скачал Java CSP с официального сайта КриптоПро, установил Java CSP командой
Код:
mvn install:install-file -Dfile=./libs/JCSP.jar -DgroupId=ru.cryptopro.jcp -DartifactId=jcp-jscp -Dversion=5.0.40363-A -Dpackaging=jar

Добавил зависимость в pom файл
Код:
<dependency>
   <groupId>ru.cryptopro.jcp</groupId>
   <artifactId>jcp-jscp</artifactId>
   <version>5.0.40363-A</version>
</dependency>


Попробовал запустить простой код:

Код:
import java.security.Security;
import ru.CryptoPro.JCSP.JCSP;

public class Main {
    public static void main(String[] args) {
        System.setProperty("file.encoding", "UTF-8");
        Security.addProvider(new JCSP()); // провайдер JCSP
        //Security.addProvider(new RevCheck());// провайдер проверки сертификатов JCPRevCheck (revocation-провайдер)
        //Security.addProvider(new CryptoProvider());// провайдер шифрования JCryptoP
    }
}


И получаю ошибку

Exception in thread "main" java.lang.NoClassDefFoundError: ru/CryptoPro/JCP/tools/Platform
at ru.CryptoPro.JCSP.JCSP.<clinit>(Unknown Source)
at Main.main(Main.java:7)
Caused by: java.lang.ClassNotFoundException: ru.CryptoPro.JCP.tools.Platform
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
... 2 more


Что я делаю не так? Куда копать?

Конфиг системы:
Windows 10 Pro

Maven 3.8.8

OpenJDK 22.0.1 2024-04-16

IntelliJ IDEA 2024.2.0.2 (Ultimate Edition)
Build #IU-242.20224.419, built on August 19, 2024
Licensed to Trial User
Subscription is active until February 25, 2025.
Runtime version: 21.0.3+13-b509.4 amd64 (JCEF 122.1.9)
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Toolkit: sun.awt.windows.WToolkit
Windows 10.0
GC: G1 Young Generation, G1 Concurrent GC, G1 Old Generation
Memory: 2048M
Cores: 16
Registry:
ide.experimental.ui=true
Kotlin: 242.20224.419-IJ
Offline Евгений Афанасьев  
#2 Оставлено : 21 февраля 2025 г. 19:11:17(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,027
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 727 раз в 685 постах
Добрый день.
Одного JCSP.jar мало, надо и другие файлы: JCP, ASN1P и т.д. Например, ru/CryptoPro/JCP/tools/Platform находится в JCP.jar, которого, видимо, нет.
Offline Jotun  
#3 Оставлено : 28 февраля 2025 г. 15:52:05(UTC)
Jotun

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

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

Автор: Евгений Афанасьев Перейти к цитате
Добрый день.
Одного JCSP.jar мало, надо и другие файлы: JCP, ASN1P и т.д. Например, ru/CryptoPro/JCP/tools/Platform находится в JCP.jar, которого, видимо, нет.


Спасибо! Да, это сработало. А есть ли какие-то примеры кода для работы с ключевыми носителями (JaCarta, eToken) и чтением сертификатов в хранилище компьютера пользователя? Хочется научиться читать данные сертификатов для определения срока действия закрытых ключей и т.п.
Offline Евгений Афанасьев  
#4 Оставлено : 5 марта 2025 г. 9:49:49(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,027
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 727 раз в 685 постах
Для работы с другими хранилищами обычно требуется только передать нужное имя name хранилища в KeyStore.getInstance(name, provider).
Список зарегистрированных хранилищ (например, может пригодиться при использовании токенов) можно получить с помощью кода вроде
Код:

Set<Provider.Service> services = (new JCSP()).getServices();
  for (Provider.Service service : services) {
    if (service.getType().equalsIgnoreCase("KeyStore")) {
      list.add(service.getAlgorithm());
    }
}

Примеры получения ключа, сертификата есть в samples-sources, нужно искать по словам .getKey, .getEntry, .getCertificate.

Для работы с системными хранилищами пользователя есть имена KeyStore: "MY", "CA", "ROOT", "AddressBook". Но у них есть свои особенности, см. пример SystemStoreExample в пакете JCSP.Container архива samples-sources.jar. С случае использования указанных имен хранилищ будут перечисляться сертификаты, хранящиеся в них, и ключи, если сертификат связан с ключом.

Отредактировано пользователем 5 марта 2025 г. 9:50:24(UTC)  | Причина: Не указана

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