Как получить доступ к сертификату от eToken в java

Я хочу прочитать сертификат из eToken, когда он подключен, когда я храню этот сертификат на локальном компьютере, я могу прочитать его через свое java-приложение, но я не знаю, как его прочитать из eToken.

RSAPublicKey pub;
            String fileName = "C:\\myCert.cer";

             InputStream inStream = new FileInputStream(fileName);
             CertificateFactory cf = CertificateFactory.getInstance("X.509");
             X509Certificate cert =
        (X509Certificate)cf.generateCertificate(inStream);
             inStream.close();

             pub = (RSAPublicKey) cert.getPublicKey();
             System.out.println(cert.getIssuerDN());
             System.out.println(cert.getSubjectDN());
             System.out.println(cert.getSubjectAlternativeNames());
             byte [] tempPub = pub.getEncoded();
             String sPub = new String( tempPub );

person Pravin    schedule 14.11.2011    source источник


Ответы (1)


Один из способов сделать это — использовать поставщика PKCS#11. . Он также поставляется с примерами.

person emboss    schedule 14.11.2011
comment
Обратите внимание, что поставщик PKCS#11 доступен только в 32-разрядных версиях Oracle Java 6 и 7. - person Robert; 14.11.2011
comment
@emboss спасибо за повтор, но когда я подключил USB-токен, я вижу myCert из mozila firefox -> инструменты-> Параметры-> просмотр сертификатов, а после отключения я не могу, так есть ли способ получить доступ к этому сертификату? Как я уже упоминал в своем коде и по вашей ссылке, могу ли я это сделать? пожалуйста, скажи мне, что я действительно застрял здесь... - person Pravin; 14.11.2011
comment
Конечно, все это описано в документации. По сути, вы предоставляете провайдеру PKCS#11 информацию о том, где найти собственную библиотеку PKCS#11, после чего вы можете получить доступ к сертификатам и ключам, используя KeyStore (не забудьте использовать KeyStore.getInstance("PKCS11")). - person emboss; 14.11.2011
comment
@emboss я пытаюсь выполнить ваши инструкции, но получаю сообщение об ошибке в KeyStore key = KeyStore.getInstance(PKCS11, pro) as: java.security.NoSuchAlgorithmException: нет такого алгоритма: PKCS11 для провайдера SunPKCS11-Aladdin. Также я пробовал несколько комбинаций с KeyStore.getInstance(); но все же застрял. В файле конфигурации я указал C:/WINDOWS/system32/eTPKCS11.dll. - person Pravin; 18.11.2011
comment
Вы уверены, что отредактировали правильный файл java.security? Это часто случается со мной при использовании нескольких JRE? - person emboss; 18.11.2011
comment
@emboss Да, но я думаю, что мы можем установить провайдера статически или программно, поэтому я пробовал оба способа, но все равно получаю ту же ошибку... - person Pravin; 18.11.2011