Zusammenfassung: Wenn JCA über PKCS11 über OpenSC verwendet wird, wird die PIN beim Extrahieren von Zertifikaten angefordert.
Ich habe eine Anwendung, die mit einer Smartcard signieren muss. Die Smartcard wird von OpenSC unterstützt, daher verwende ich den in Java integrierten Wrapper-Provider pkcs11, um ihn zu verwenden. Aus funktionalen Gründen muss ich die Zertifikate in der Karte erhalten, ohne eine PIN angefordert zu haben. Wenn der Benutzer schließlich unterschreibt, dann wird natürlich die PIN benötigt.
Ich sehe, ich kann es von der Kommandozeile aus tun, ohne eine PIN anzugeben:
%Vor%So weit, so gut.
In der Dokumentation von Oracle steht eindeutig: "Der Builder wird bei Bedarf mit dem zuvor konfigurierten Callback-Handler nach einem Passwort fragen" ( Ссылка ). Allerdings fordert mein Code immer den Pin als Sohn, wie ich KeyStore ks0 = ksbuilder0.getKeyStore();
aufrufen, auch nur beim Extrahieren öffentlicher Informationen (z. B. Zertifikate).
Folgt einem Auszug des Codes:
%Vor%Es ergibt sich:
%Vor% Wie Sie sehen können, wird das Passwort angefordert, bevor das Zertifikat erhalten wird. Mittels Debugging kann ich erkennen, dass das Passwort in der Zeile KeyStore ks0 = ksbuilder0.getKeyStore();
Irgendeine Idee? Gibt es keine Möglichkeit, es so zu konfigurieren, wie ich es möchte? Irgendwelche weiteren Ideen oder Tests?
Außerdem: Kennen Sie eine andere Möglichkeit, auf Smartcards zuzugreifen, zum Beispiel direkt über einen JAVA2OpenSC-Wrapper oder ähnliches?
Danke,
Gelöst
Ich habe einen Weg gefunden, das öffentliche Zertifikat von der Chipkarte zu bekommen.
%Vor%Das KeyStore.load () sollte mit PaswordProtection-Objekt mit leerem Pin bereitgestellt werden. Dadurch kann ich das öffentliche Zertifikat lesen und die Daten daraus extrahieren.
Ich habe dies mit drei verschiedenen Arten von Smartcards getestet und es arbeitet an allen von ihnen
Nun, was ich einmal getan habe, war etwas wie
%Vor%Die Datei pkcs.cfg ist eine Datei, die auf die Bibliothek "libpteidpkcs11.so" verweist, und Sie sollten sie an Ihren Code anpassen können. Meine liest:
%Vor%Ein anderer Weg ist IAIK PKCS # 11 Wrapper . JavaDoc hier . Beispielcode unten.
%Vor%