2016-07-21 60 views
1

Ich möchte die Liste von X509Certificate von meiner Smartcard ohne Anmeldung (ohne PIN) abrufen.Holen X509Certificates von Smartcard ohne Authentifizierung

My-Code ist der folgende:

String conf = args[0]; 
    Provider p = new sun.security.pkcs11.SunPKCS11(conf); 
    Security.addProvider(p); 

    KeyStore ks = KeyStore.getInstance("PKCS11"); 

    1) ks.load(null, null); 
    2) ks.load(null, "".toCharArray()); 

Der erste Test (1) mit dieser Stacktrace fehlschlägt:

Exception in thread "main" java.io.IOException: load failed 
    at sun.security.pkcs11.P11KeyStore.engineLoad(P11KeyStore.java:763) 
    at java.security.KeyStore.load(Unknown Source) 
    at TestPKCS11.main(TestPKCS11.java:29) 
Caused by: javax.security.auth.login.LoginException: no password provided, and n 
o callback handler available for retrieving password 
     at sun.security.pkcs11.SunPKCS11.login(SunPKCS11.java:1184) 
     at sun.security.pkcs11.P11KeyStore.login(P11KeyStore.java:849) 
     at sun.security.pkcs11.P11KeyStore.engineLoad(P11KeyStore.java:751) 

Der zweite (2) nicht mit:

Exception in thread "main" java.io.IOException: load failed 
    at sun.security.pkcs11.P11KeyStore.engineLoad(P11KeyStore.java:763) 
    at java.security.KeyStore.load(Unknown Source) 
    at TestPKCS11.main(TestPKCS11.java:30) 
Caused by: javax.security.auth.login.LoginException 
     at sun.security.pkcs11.SunPKCS11.login(SunPKCS11.java:1238) 
     at sun.security.pkcs11.P11KeyStore.login(P11KeyStore.java:849) 
     at sun.security.pkcs11.P11KeyStore.engineLoad(P11KeyStore.java:753) 
     ... 2 more 
Caused by: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_PIN_INVALID 
     at sun.security.pkcs11.wrapper.PKCS11.C_Login(Native Method) 
     at sun.security.pkcs11.SunPKCS11.login(SunPKCS11.java:1222) 

Meine Konfiguration ist folgende:

name=SmartCard 
slotListIndex = 0 
library=C:\gclib.dll 
attributes(*,CKO_PUBLIC_KEY,*)={ CKA_TOKEN=true } 

Hinweis: Ich habe ein lokales Tool (Classic Client ToolBox), das keine PIN erfordert, um die Zertifikate anzuzeigen.

Antwort

0

Sieht aus wie Suns Provider immer Login anruft, egal ob Sie sich einloggen wollen oder nicht. Offen gesagt, kann es sein, dass die einzige Möglichkeit darin besteht, den Ansatz zu ändern, z. Verwenden Sie einen anderen Weg, um auf PKCS # 11-Geräte zuzugreifen (wir haben solche Mechanismen in unserer SecureBlackbox zum Beispiel).

Auf der anderen Seite ist die Möglichkeit, Informationen ohne Anmeldung am Gerät abzurufen, eine Art Informationsleck, und daher hängt die Möglichkeit, die Liste oder die Zertifikate selbst zu erhalten, vom jeweiligen Gerät ab. Was auf Ihrem Gerät funktioniert, funktioniert möglicherweise nicht auf anderen Geräten.