PKCS # 11 PKCS11 dll - PullRequest
       55

PKCS # 11 PKCS11 dll

0 голосов
/ 16 января 2012

Мы пытаемся здесь реализовать автономное приложение java, которое может подключаться к веб-сайту https и проходить аутентификацию с помощью смарт-карты PKI, и мы решаем все виды проблем.

Я должен упомянуть, что мы можем запустить приложение такого типа, если мы используем апплет (тогда будет использоваться хранилище ключей и трастовые ресурсы браузера), все работает отлично, мы вводим пин-код карты и получаем доступ к веб-страница.

У меня есть два вопроса. Сначала касательно моего кода, видит ли кто-то что-то не так с ним. Я включил ошибку времени выполнения, которую мы имеем при запуске:

public class TestPKCS11 {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

    // Set keyStore and trustStore
    System.setProperty("javax.net.ssl.trustStoreType", "PKCS11");
    System.setProperty("javax.net.ssl.trustStore", "NONE");
    System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
    System.setProperty("javax.net.ssl.trustStoreProvider", "SunPKCS11-mycard");
    String trustStore = System.getProperty("javax.net.ssl.trustStore");
    if (trustStore == null) {
        System.out.println("javax.net.ssl.trustStore is not defined");
    } else {
        System.out.println("javax.net.ssl.trustStore = " + trustStore);
    }

    System.setProperty("javax.net.ssl.keyStoreType", "PKCS11");
    System.setProperty("javax.net.ssl.keyStore", "NONE");
    System.setProperty("javax.net.ssl.keyStorePassword", "changeit");
    System.setProperty("javax.net.ssl.keyStoreProvider", "SunPKCS11-mycard");
    String keyStore = System.getProperty("javax.net.ssl.keyStore");
    if (keyStore == null) {
        System.out.println("javax.net.ssl.keyStore is not defined");
    } else {
        System.out.println("javax.net.ssl.keyStore = " + keyStore);
    }

    System.setProperty("javax.net.debug", "ssl"); // dynamic conf of PKCS#11

    String configName = "C:\\confDirectory\\pkcs11.cfg";

    sun.security.pkcs11.SunPKCS11 sunPKCS11 = new sun.security.pkcs11.SunPKCS11(configName);
    Provider p = sunPKCS11;
    Security.addProvider(p);


    SSLSocketFactory sslFact = (SSLSocketFactory) SSLSocketFactory.getDefault();

    try{
        SSLSocket sock = (SSLSocket)sslFact.createSocket("myserver", 8081);

        sock.startHandshake();

    } catch (SSLHandshakeException ex) {
        Logger.getLogger(TestPKCS11.class.getName()).log(Level.SEVERE, null, ex);
        System.out.println(ex.getMessage());
    } 
    catch (IOException ex) {
        Logger.getLogger(TestPKCS11.class.getName()).log(Level.SEVERE, null, ex);
    }
}

Выполнить ОШИБКА:

Exception in thread "main" java.security.ProviderException: Initialization failed
    at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:340)
    at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:86)
    at TestPKCS11.main(TestPKCS11.java:95)
Caused by: java.io.IOException: The specified procedure could not be found.
    at sun.security.pkcs11.wrapper.PKCS11.connect(Native Method)
    at sun.security.pkcs11.wrapper.PKCS11.<init>(PKCS11.java:141)
    at sun.security.pkcs11.wrapper.PKCS11.getInstance(PKCS11.java:154)
    at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:281)
    ... 2 more

Мой второй вопрос касается использования dll для pkcs11. В настоящее время я использую это, что включено в установку IBM Rational (jpkcs11.dll), но я действительно не уверен, что это хорошо. Я читаю об OpenSC, но не могу найти файл OpenSC-pkcs11.dll. Я вижу только opensc.dll.

Я работаю на Windows7 с Java 1.6 27

Спасибо

Ответы [ 2 ]

2 голосов
/ 17 января 2012

OpenSC PKCS # 11 называется "opensc-pkcs11.dll" и помещается в system32.Но вам нужно убедиться, что ваша смарт-карта поддерживается OpenSC.Как правило: вам нужно использовать поставщика PKCS # 11, который поставляется с вашей картой (обычно с закрытым исходным кодом) или поддерживает вашу карту (например, OpenSC)

0 голосов
/ 14 июля 2012

Вместо помещения DLL в system32, вы можете динамически загружать ее из домашнего каталога пользователей.Но это зависит от вашего приложения, от того, как вы собираетесь его установить.

...