das java-keytool mit opensc pkcs#11-provider funktioniert nur mit debug-option aktiviert ist

Habe ich die neueste opensc 0.12.2 läuft auf ubuntu 11.10 mit OpenJDK ( java-version "1.6.0_22")

Lesen kann ich meine smartcard (Feitian ePass PKI) mit

pkcs15-tool --dump

Versuche ich jetzt, um meine smartcard mit keytool:

keytool 
   -providerClass sun.security.pkcs11.SunPKCS11 \
   -providerArg /etc/opensc/opensc-java.cfg \
   -keystore NONE -storetype PKCS11 -list 

was zu einem Fehler führt:

keytool error: java.security.KeyStoreException: PKCS11 not found
java.security.KeyStoreException: PKCS11 not found
    at java.security.KeyStore.getInstance(KeyStore.java:603)
    at sun.security.tools.KeyTool.doCommands(KeyTool.java:621)
    at sun.security.tools.KeyTool.run(KeyTool.java:194)
    at sun.security.tools.KeyTool.main(KeyTool.java:188)
Caused by: java.security.NoSuchAlgorithmException: PKCS11 KeyStore not available
    at sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
    at java.security.Security.getImpl(Security.java:696)
    at java.security.KeyStore.getInstance(KeyStore.java:600)
    ... 3 more

Wenn ich den selben Befehl mit debug-Optionen aktiviert, wie diese:

keytool 
   -providerClass sun.security.pkcs11.SunPKCS11 \
   -providerArg /etc/opensc/opensc-java.cfg \
   -keystore NONE -storetype PKCS11 -list \
   -J-Djava.security.debug=sunpkcs11

es plötzlich funktioniert:

... debug infos ...
Enter keystore password:  
sunpkcs11: login succeeded

Keystore type: PKCS11
Keystore provider: SunPKCS11-OpenSC

Your keystore contains 2 entries
...
Certificate fingerprint (MD5): ...
...
Certificate fingerprint (MD5): ...

Das gleiche Verhalten, wenn ich es konfigurieren statisch:

$ grep opensc /usr/lib/jvm/java-6-openjdk/jre/lib/security/java.security
security.provider.7=sun.security.pkcs11.SunPKCS11 /etc/opensc/opensc-java.cfg

und meine config

$ cat /etc/opensc/opensc-java.cfg
name = OpenSC
description = SunPKCS11 w/ OpenSC Smart card Framework
library = /usr/lib/opensc-pkcs11.so

Meine Vermutung, es hat etwas zu tun mit openjdk oder interne Paket sun.security die kann in der Regel nicht verwendet werden, da es sich um ein internes Paket. Aktivieren von Debug-Optionen aktivieren Sie das interne Paket?

InformationsquelleAutor Janning | 2011-11-23

Schreibe einen Kommentar