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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline stck  
#1 Оставлено : 12 ноября 2012 г. 14:07:17(UTC)
stck

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

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

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

Выполняю код:
Код:
 com.sun.org.apache.xml.internal.security.Init.init();

Security.addProvider(new ru.CryptoPro.JCP.JCP());
KeyStore keyStore = KeyStore.getInstance(getStoreName(Config.KEYSTORE), "JCP"); //в данном контексте возвращает "RutokenStore"
keyStore.load(null, null);

PrivateKey privateKey = (PrivateKey)keyStore.getKey(Config.KEYSTORE_KEY_ALIAS, Config.KEYSTORE_KEY_PASS.toCharArray());


После keyStore.getKey() отваливается с таким трейсом:

Цитата:
ноя 12, 2012 10:49:14 AM ru.CryptoPro.JCP.tools.l a
INFO: Loading JCP...
ноя 12, 2012 10:49:15 AM ru.CryptoPro.JCP.tools.l a
INFO: JCP loaded.

java.security.UnrecoverableKeyException: Unexpected error
at ru.CryptoPro.JCP.KeyStore.c.e(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.ContainerStore.engineGetKey(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineGetKey(Unknown Source)
at java.security.KeyStore.getKey(KeyStore.java:792)
at smev.soap.RequestHandler.<init>(RequestHandler.java:204)
at smev.ServiceFormHandler.submitForm(ServiceFormHandler.java:475)
at smev.ServiceFormHandler.access$200(ServiceFormHandler.java:40)
at smev.ServiceFormHandler$SendFormAction$1.run(ServiceFormHandler.java:83)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.io.IOException: Unexpected error
at rtjlib.JCP.RutokenReader.lock(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.f.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at ru.CryptoPro.JCP.KeyStore.ContainerStore.a(Unknown Source)
... 8 more
Java Result: 1
Offline stck  
#2 Оставлено : 12 ноября 2012 г. 15:24:35(UTC)
stck

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

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

UPD:

Добавил провайдера PKCS11:

Код:
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());


Но появилась другая проблема - не существует алиасов, хотя через JCP оба алиаса видны.
И вылетает на этапе (руководствовался статьёй формирования подписи с помощью jcp):
Код:
 X509Data x509d = kif.newX509Data(Collections.singletonList((X509Certificate) cert));


Говоря при этом, что
Цитата:
content[0] is not valid x509Data type
Offline Евгений Афанасьев  
#3 Оставлено : 12 ноября 2012 г. 19:23:24(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Здравствуйте.
Возможно, cert - не сертификат, попробуйте вывести его содержимое.
Offline stck  
#4 Оставлено : 12 ноября 2012 г. 19:27:40(UTC)
stck

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

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

Здравствуйте, afev.

Цитата:
Возможно, cert - не сертификат, попробуйте вывести его содержимое.


Вообще да, он null, но, используя HDImageStore, всё работает. Быть может проблема в алиасе?
Код:
X509Certificate cert = (X509Certificate)keyStore.getCertificate(Config.KEYSTORE_CERT_ALIAS);
Offline Евгений Афанасьев  
#5 Оставлено : 12 ноября 2012 г. 19:48:48(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Через панель ControlPane удается увидеть/получить сертификат в хранилище?
Если алиас верный, то получаете сертификат правильно.
Offline stck  
#6 Оставлено : 13 ноября 2012 г. 11:28:17(UTC)
stck

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

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

Через панель сертификат вижу, пытаюсь выводить алиасы и они пусты.
Offline t1nk  
#7 Оставлено : 25 августа 2016 г. 10:53:58(UTC)
t1nk

Статус: Участник

Группы: Участники
Зарегистрирован: 25.08.2016(UTC)
Сообщений: 17
Российская Федерация
Откуда: Белгород

Сказал(а) «Спасибо»: 7 раз
Здравствуйте !

Удалось ли вам решить проблему ? Think

PS
Может кому пригодится:

Код:
KeyStore keyStore = KeyStore.getInstance( "RutokenStore" );
keyStore.load( null, PASS );
// Получаем список ключей Рутокена
Enumeration<String> keyAliases = keyStore.aliases();
while ( keyAliases.hasMoreElements() ) {
    System.out.println( "Key: " + keyAliases.nextElement() );
}
// Достаем нужный ключ для подписи
PrivateKey privateKey = (PrivateKey)keyStore.getKey( ALIAS, PASS );
X509Certificate cert = (X509Certificate)keyStore.getCertificate( ALIAS );

Отредактировано пользователем 29 августа 2016 г. 12:12:54(UTC)  | Причина: добавлено своё решение

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