Статус: Новичок
Группы: Участники
Зарегистрирован: 26.06.2023(UTC) Сообщений: 9  Откуда: Армянск Сказал(а) «Спасибо»: 3 раз
|
Добрый день! Было рабочее Java приложение с использованием КриптоПро JCP для подписи JWT. Переходим на использование КриптоПро CSP5.0 1. Установили КриптоПро CSP5.0 Настройки  2024-02-12_10-53.png (28kb) загружен 6 раз(а).2. Хранилище содержит мой контейнер  2024-02-12_11-07.png (27kb) загружен 7 раз(а).3. В соответствии с п.п. "3.6.1.1 Определение типа используемого ключевого носителя" инициализирую ключевое хранилище Цитата:KeyStore store = KeyStore.getInstance("HDIMAGE","JCSP"); В результате получаю исключение Цитата:java.security.NoSuchProviderException: no such provider: JCSP Подскажите пожалуйста, что не так настроено?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 26.06.2023(UTC) Сообщений: 9  Откуда: Армянск Сказал(а) «Спасибо»: 3 раз
|
Спасибо за помощь) Получилось разобраться с данной проблемой. Оказывается, в отличие от JCP в CSP необходимо провайдер JCSP инициализировать непосредственно в программе. Цитата:JCPInit.initProviders(true); Но теперь столкнулся с очередной проблемой). В настройках "Настройки КриптоПро JCP" закладке "Хранилища ключей и сертификатов" видно что в HDImageStore находиться контейнер с ключом и сертификатом.  2024-02-12_15-10.png (30kb) загружен 10 раз(а).Но получить инстанс данного хранилища не получается указанным способом. Цитата:KeyStore store = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME); store.load(null, keyStorePassword.toCharArray()); Размер store после load = 0. Подскажите как получить доступ хранилищу и получить ключ/сертификат?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 21.11.2010(UTC) Сообщений: 1,130
Сказал(а) «Спасибо»: 7 раз Поблагодарили: 155 раз в 140 постах
|
На скриншоте - хранилища JCP. Они у него отдельные. JCSP работает через "нативный" криптопровайдер и "не в курсе, что там у JCP". JCP - pure-Java и "всё своё" JCSP - Java-"обёртка" для КРИПТОПРО CSP.
|
 1 пользователь поблагодарил basid за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,027  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 727 раз в 685 постах
|
Здравствуйте. 1. По Java, JCP. JCSP лучше писать в соответствующем разделе форума. 2. Цитата: Оказывается, в отличие от JCP в CSP необходимо провайдер JCSP инициализировать непосредственно в программе. Цитата: JCPInit.initProviders(true);
Нет. Провайдер должен быть либо установлен штатно в lib/ext в случае Java 8, либо добавляется с помощью Security.addProvider(new JCSP()) в случае Java 10+, причем в порядке ДО JCP, если вы хотите, чтобы JCSP был провайдером по умолчанию. JCPInit.initProviders делает лишние операции, он скрывает важные детали и больше предназначен для внутренних целей. См. документацию в папке Doc дистрибутива. |
|
 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 26.06.2023(UTC) Сообщений: 9  Откуда: Армянск Сказал(а) «Спасибо»: 3 раз
|
Евгений, спасибо. Хотелось бы понять как сделать правильно применительно к конкретной задаче. Вот так работает и в хранилище есть ключ. Но я так понимаю это тот же JCP. Цитата: HDImageStore.setDir(ebsKeyPath); Security.addProvider(new JCSP()); Security.addProvider(new JCP()); KeyStore store = KeyStore.getInstance(JCP.HD_STORE_NAME); store.load(null, keyStorePassword.toCharArray());
Чтобы использовать для подписи JCSP необходимо хранилище инициализировать по другому как указано в документах для CSP, но так не работает т.к. в хранилище нет ключа. Цитата: KeyStore store = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME);
Вопрос почему в хранилище нет ключа?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 26.06.2023(UTC) Сообщений: 9  Откуда: Армянск Сказал(а) «Спасибо»: 3 раз
|
Автор: basid  На скриншоте - хранилища JCP. Они у него отдельные. JCSP работает через "нативный" криптопровайдер и "не в курсе, что там у JCP". JCP - pure-Java и "всё своё" JCSP - Java-"обёртка" для КРИПТОПРО CSP. Спасибо, но непонятно как это использовать. Надеюсь мне не нужно что-то писать на машинном коде?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 26.06.2023(UTC) Сообщений: 9  Откуда: Армянск Сказал(а) «Спасибо»: 3 раз
|
Автор: Евгений Афанасьев  Здравствуйте. 1. По Java, JCP. JCSP лучше писать в соответствующем разделе форума. 2. Цитата: Оказывается, в отличие от JCP в CSP необходимо провайдер JCSP инициализировать непосредственно в программе. Цитата: JCPInit.initProviders(true);
Нет. Провайдер должен быть либо установлен штатно в lib/ext в случае Java 8, либо добавляется с помощью Security.addProvider(new JCSP()) в случае Java 10+, причем в порядке ДО JCP, если вы хотите, чтобы JCSP был провайдером по умолчанию. JCPInit.initProviders делает лишние операции, он скрывает важные детали и больше предназначен для внутренних целей. См. документацию в папке Doc дистрибутива. Евгений, спасибо. Хотелось бы понять как сделать правильно применительно к конкретной задаче. Вот так работает и в хранилище есть ключ. Но я так понимаю это тот же JCP. Код:
HDImageStore.setDir(ebsKeyPath);
Security.addProvider(new JCSP());
Security.addProvider(new JCP());
KeyStore store = KeyStore.getInstance(JCP.HD_STORE_NAME);
store.load(null, keyStorePassword.toCharArray());
Чтобы использовать для подписи JCSP необходимо хранилище инициализировать по другому как указано в документах для CSP, но так не работает т.к. в хранилище нет ключа. Код:
KeyStore store = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME);
Вопрос почему в хранилище нет ключа?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close