Статус: Новичок
Группы: Участники
Зарегистрирован: 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
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Здравствуйте. Возможно, cert - не сертификат, попробуйте вывести его содержимое. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 12.11.2012(UTC) Сообщений: 9 Откуда: Россия
|
Здравствуйте, afev. Цитата:Возможно, cert - не сертификат, попробуйте вывести его содержимое. Вообще да, он null, но, используя HDImageStore, всё работает. Быть может проблема в алиасе? Код:X509Certificate cert = (X509Certificate)keyStore.getCertificate(Config.KEYSTORE_CERT_ALIAS);
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Через панель ControlPane удается увидеть/получить сертификат в хранилище? Если алиас верный, то получаете сертификат правильно. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 12.11.2012(UTC) Сообщений: 9 Откуда: Россия
|
Через панель сертификат вижу, пытаюсь выводить алиасы и они пусты.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.08.2016(UTC) Сообщений: 17 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Белгород Сказал(а) «Спасибо»: 7 раз
|
Здравствуйте ! Удалось ли вам решить проблему ? 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)
| Причина: добавлено своё решение
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close