Получение алиасов с токена

Всё установлено, настроено (JCP, кп Rutoken, CSP видят Рутокен без проблем), библиотеки подключены (включая rtjlib.jar и rtjcard.jar).
Но, когда выполняю код

String pkcs11Config = "name=ruToken\nlibrary=C:\\WINDOWS\\system32\\rtPKCS11.dll";
ByteArrayInputStream configStream = new ByteArrayInputStream(pkcs11Config.getBytes());
Provider pkcs11Provider = new SunPKCS11(configStream);
Security.addProvider(pkcs11Provider);

keyStore = KeyStore.getInstance(getStoreName(keystore), "SunPKCS11-ruToken");//В данном контексте "PKCS11"
keyStore.load(null, Config.KEYSTORE_PASS.toCharArray());

aliases = Collections.list(keyStore.aliases()); 

В aliases - пусто, хотя через JCP они видны.

Re: Получение алиасов с токена

stck пишет:

Всё установлено, настроено (JCP, кп Rutoken, CSP видят Рутокен без проблем), библиотеки подключены (включая rtjlib.jar и rtjcard.jar).
Но, когда выполняю код

String pkcs11Config = "name=ruToken\nlibrary=C:\\WINDOWS\\system32\\rtPKCS11.dll";
ByteArrayInputStream configStream = new ByteArrayInputStream(pkcs11Config.getBytes());
Provider pkcs11Provider = new SunPKCS11(configStream);
Security.addProvider(pkcs11Provider);

keyStore = KeyStore.getInstance(getStoreName(keystore), "SunPKCS11-ruToken");//В данном контексте "PKCS11"
keyStore.load(null, Config.KEYSTORE_PASS.toCharArray());

aliases = Collections.list(keyStore.aliases()); 

В aliases - пусто, хотя через JCP они видны.

Здравствуйте! Уточните пожалуйста задачу, которую Вам нужно решить. Есть подозрение, что Вы хотите через JCA использовать контейнеры КриптоПро JCP. Способом, который Вы используете, это сделать не получится.

Re: Получение алиасов с токена

Vladimir Ivanov пишет:

Здравствуйте! Уточните пожалуйста задачу, которую Вам нужно решить. Есть подозрение, что Вы хотите через JCA использовать контейнеры КриптоПро JCP. Способом, который Вы используете, это сделать не получится.

Здравствуйте, Владимир. Передо мной стоит задача - подпись документа с помощью КриптоПро JCP (используя в качестве хранилищ HDImageStore или Рутокен - в зависимости от настроек). Читал реферренс про PKCS#11 и Java, там был описан такой способ получения хранилища ключей и сертификатов. Прорыл очень много информации - или я пропустил что-то, или не нашёл. Подзадача, в которой пытаюсь реализовать - извлечь список  алиасов, затем по выбранному алиасу получить сертификат, ключ для подписи. Но что-то не получается. Буду благодарен за информацию для выбора правильного курса.

Re: Получение алиасов с токена

stck пишет:
Vladimir Ivanov пишет:

Здравствуйте! Уточните пожалуйста задачу, которую Вам нужно решить. Есть подозрение, что Вы хотите через JCA использовать контейнеры КриптоПро JCP. Способом, который Вы используете, это сделать не получится.

Здравствуйте, Владимир. Передо мной стоит задача - подпись документа с помощью КриптоПро JCP (используя в качестве хранилищ HDImageStore или Рутокен - в зависимости от настроек). Читал реферренс про PKCS#11 и Java, там был описан такой способ получения хранилища ключей и сертификатов. Прорыл очень много информации - или я пропустил что-то, или не нашёл. Подзадача, в которой пытаюсь реализовать - извлечь список  алиасов, затем по выбранному алиасу получить сертификат, ключ для подписи. Но что-то не получается. Буду благодарен за информацию для выбора правильного курса.

Основной момент состоит в том, что КриптоПро имеет собственный формат хранения сертификатов и ключевой информации, контейнеры эти недоступны через PKCS#11. Вы пытаетесь использовать PKCS#11 провайдер через JCA, но это не даст доступа к ключевой информации КриптоПро. При этом тип ключевого носителя в данном случае не имеет никакого значения: это все инкапскулировано в криптопровайдер.
Соответственно, и provider и keystore должны быть "КриптоПрошными". Поэтому лучше всего задать вопрос на форуме КриптоПро в в разделе JCP: http://www.cryptopro.ru/forum2/Default. … cs&f=8

КриптоПро JCP добавляет в security.config дополнительные провайдеры:

security.provider.11=ru.CryptoPro.JCP.JCP
security.provider.12=ru.CryptoPro.Crypto.CryptoProvider
security.provider.13=ru.CryptoPro.reprov.RevCheck

Вот какой-то из них и надо подгружать в качестве Provider

Re: Получение алиасов с токена

Vladimir Ivanov пишет:
stck пишет:
Vladimir Ivanov пишет:

Здравствуйте! Уточните пожалуйста задачу, которую Вам нужно решить. Есть подозрение, что Вы хотите через JCA использовать контейнеры КриптоПро JCP. Способом, который Вы используете, это сделать не получится.

Здравствуйте, Владимир. Передо мной стоит задача - подпись документа с помощью КриптоПро JCP (используя в качестве хранилищ HDImageStore или Рутокен - в зависимости от настроек). Читал реферренс про PKCS#11 и Java, там был описан такой способ получения хранилища ключей и сертификатов. Прорыл очень много информации - или я пропустил что-то, или не нашёл. Подзадача, в которой пытаюсь реализовать - извлечь список  алиасов, затем по выбранному алиасу получить сертификат, ключ для подписи. Но что-то не получается. Буду благодарен за информацию для выбора правильного курса.

Основной момент состоит в том, что КриптоПро имеет собственный формат хранения сертификатов и ключевой информации, контейнеры эти недоступны через PKCS#11. Вы пытаетесь использовать PKCS#11 провайдер через JCA, но это не даст доступа к ключевой информации КриптоПро. При этом тип ключевого носителя в данном случае не имеет никакого значения: это все инкапскулировано в криптопровайдер.
Соответственно, и provider и keystore должны быть "КриптоПрошными". Поэтому лучше всего задать вопрос на форуме КриптоПро в в разделе JCP: http://www.cryptopro.ru/forum2/Default. … cs&f=8

Получается, что прочитать ключевую информацию с токена можно только с помощью того криптопровайдера, с помощью которого она записана?
Там вроде всегда JCP провайдер используется, но это уже мелочи:)
Спасибо Вам, за понятное объяснение.

Re: Получение алиасов с токена

stck пишет:

Получается, что прочитать ключевую информацию с токена можно только с помощью того криптопровайдера, с помощью которого она записана?

Это не является общим местом для всех криптопровайдеров, но с КриптоПро это именно так.

stck пишет:

Там вроде всегда JCP провайдер используется, но это уже мелочи:)

Провайдеры бывают разными. "Родные" провайдеры JCA, например, вообще не подозревают о существовании ГОСТовых алгоритмов и совсем не умеют с ними работать.