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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline stdpr2014  
#1 Оставлено : 12 февраля 2024 г. 11:22:51(UTC)
stdpr2014

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

Группы: Участники
Зарегистрирован: 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


Подскажите пожалуйста, что не так настроено?
Offline stdpr2014  
#2 Оставлено : 12 февраля 2024 г. 15:28:45(UTC)
stdpr2014

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

Группы: Участники
Зарегистрирован: 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.
Подскажите как получить доступ хранилищу и получить ключ/сертификат?
Offline basid  
#3 Оставлено : 13 февраля 2024 г. 13:13:26(UTC)
basid

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

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

Сказал(а) «Спасибо»: 7 раз
Поблагодарили: 155 раз в 140 постах
На скриншоте - хранилища JCP. Они у него отдельные.
JCSP работает через "нативный" криптопровайдер и "не в курсе, что там у JCP".
JCP - pure-Java и "всё своё"
JCSP - Java-"обёртка" для КРИПТОПРО CSP.
thanks 1 пользователь поблагодарил basid за этот пост.
stdpr2014 оставлено 14.02.2024(UTC)
Offline Евгений Афанасьев  
#4 Оставлено : 13 февраля 2024 г. 13:50:07(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 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 дистрибутива.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
stdpr2014 оставлено 14.02.2024(UTC)
Offline stdpr2014  
#5 Оставлено : 14 февраля 2024 г. 12:30:41(UTC)
stdpr2014

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

Группы: Участники
Зарегистрирован: 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);


Вопрос почему в хранилище нет ключа?

Offline stdpr2014  
#6 Оставлено : 14 февраля 2024 г. 12:36:56(UTC)
stdpr2014

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

Группы: Участники
Зарегистрирован: 26.06.2023(UTC)
Сообщений: 9
Армения
Откуда: Армянск

Сказал(а) «Спасибо»: 3 раз
Автор: basid Перейти к цитате
На скриншоте - хранилища JCP. Они у него отдельные.
JCSP работает через "нативный" криптопровайдер и "не в курсе, что там у JCP".
JCP - pure-Java и "всё своё"
JCSP - Java-"обёртка" для КРИПТОПРО CSP.


Спасибо, но непонятно как это использовать. Надеюсь мне не нужно что-то писать на машинном коде?

Offline stdpr2014  
#7 Оставлено : 14 февраля 2024 г. 14:11:05(UTC)
stdpr2014

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

Группы: Участники
Зарегистрирован: 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);


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