ここでは、httpsウェブサイトに接続し、PKIスマートカードで認証できるJavaスタンドアロンアプリケーションを実装しようとしています。私たちはあらゆる種類の問題を抱えています。PKCS#11 PKCS11 dll
アプレットを使用すると(ブラウザのキーストアとトラストアが使用されます)、すべて正常に動作し、カードのピン番号を入力してアクセス権を取得すると、この種のアプリケーションを実行できることに言及する必要がありますウェブページに
私には2つの質問があります。最初に私のコードに関して、誰かがそれに何か間違っていると思っていますか?
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
私の2番目の質問は、PKCS11に使用するDLLに関するさ:
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);
}
}
はERRORを実行します。私はそれを実行している間、私たちが持っているランタイムエラーが含まれます。現在、私はそれを使用しているIBMのRationalのインストール(jpkcs11.dll)に含まれていますが、私は本当にそれが良いものであるかどうかは分かりません。私はOpenSCについて読んでいますが、OpenSC-pkcs11.dllファイルが見つかりません。私はopensc.dllを見るだけです。
私は、Java 1.6 27
でのWindows7上で実行していますが
ok私はそれをsystem32見つけられません。おそらく、このフォルダに新しいdllを許可しないクライアントからのセキュリティメッシュは、確認する必要があります。 – jon