Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PKCS#11 PKCS11 dll_Java_Smartcard_Pki_Pkcs#11 - Fatal编程技术网

Java PKCS#11 PKCS11 dll

Java PKCS#11 PKCS11 dll,java,smartcard,pki,pkcs#11,Java,Smartcard,Pki,Pkcs#11,我们在这里尝试实现一个java独立应用程序,该应用程序可以连接到https网站并使用PKI智能卡进行身份验证,我们遇到了各种各样的问题 我必须提到,如果我们使用applet(然后使用浏览器的密钥库和信任库),我们就能够运行这种应用程序,一切工作都非常正常,我们输入卡的pin码,就可以访问网页 我有两个问题。首先,关于我的代码,是否有人认为它有问题。我包括运行时出现的运行时错误: public class TestPKCS11 { /** * @param args the command l

我们在这里尝试实现一个java独立应用程序,该应用程序可以连接到https网站并使用PKI智能卡进行身份验证,我们遇到了各种各样的问题

我必须提到,如果我们使用applet(然后使用浏览器的密钥库和信任库),我们就能够运行这种应用程序,一切工作都非常正常,我们输入卡的pin码,就可以访问网页

我有两个问题。首先,关于我的代码,是否有人认为它有问题。我包括运行时出现的运行时错误:

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
线程“main”java.security.ProviderException中的异常:初始化失败 位于sun.security.pkcs11.SunPKCS11。(SunPKCS11.java:340) 位于sun.security.pkcs11.SunPKCS11。(SunPKCS11.java:86) 位于TestPKCS11.main(TestPKCS11.java:95) 原因:java.io.IOException:找不到指定的过程。 位于sun.security.pkcs11.wrapper.pkcs11.connect(本机方法) 位于sun.security.pkcs11.wrapper.pkcs11.(pkcs11.java:141) 位于sun.security.pkcs11.wrapper.pkcs11.getInstance(pkcs11.java:154) 位于sun.security.pkcs11.SunPKCS11。(SunPKCS11.java:281) ... 还有两个 我的第二个问题是关于pkcs11使用的dll。目前我正在使用IBM的Rational安装(jpkcs11.dll)中包含的,但我真的不确定它是否是好的。我确实读过OpenSC,但找不到OpenSC-pkcs11.dll文件。我只能看到opensc.dll

我在Windows7上运行Java 1.6 27


谢谢

OpenSC PKCS#11被命名为“OpenSC-pkcs11.dll”,并被放入system32。但您需要确保您的智能卡受OpenSC支持。作为一般规则:您需要使用卡附带的PKCS#11提供程序(通常是封闭源代码)或支持您的卡(如OpenSC)

而不是将DLL放入system32,您可以从用户主目录动态加载它。但这取决于您的应用程序,以及如何安装它

好吧,我找不到。可能来自客户端的安全措施不允许此文件夹中有新的dll,必须进行验证。