So stellen Sie mithilfe der Common Access Card eine Verbindung zum HTTPS-Server her

8

Ich muss ein Java-Programm schreiben, um eine Verbindung zu einem HTTPS-Server (DoD-Website) herzustellen. Die Website erfordert eine CAC-Authentifizierung (DoD Common Access Card). Wenn Sie über den Browser auf diese Site zugreifen, fügen Sie zuerst Ihr CAC ein und geben Sie eine PIN ein.

Ich muss den Authentifizierungsprozess programmatisch in Java durchführen (so etwas wie ein Browser). Wie kann ich die Informationen vom CAC abrufen? Ich habe gegoogelt und das Java PKCS # 11 Reference Guide gelesen. Scheint wie Sun PKCS # 11 Provider kann es tun, aber Sie benötigen die native PKCS # 11 Token-Implementierung.

Habe ich Recht? Hat jemand das schon mal gemacht? Jeder Vorschlag oder Kommentar wird sehr geschätzt.

    
Scott Stafford 15.04.2009, 17:40
quelle

1 Antwort

3

Zuerst müssen Sie die PKCS # 11-Unterstützung installieren. Dies ist ein systemeigener Code, der wahrscheinlich mit Ihrem Kartenleser geliefert wurde, der eine .dll (oder .so) bereitstellt, die eine PKCS # 11-Schnittstelle bereitstellt. Andere Software auf dem System, wie Mozilla-Produkte und der PKCS # 11-Provider von Sun, verwendet diese Bibliothek. (Microsoft-Produkte verwenden häufig eine andere Schnittstelle, "CAPI".)

Folgen Sie anschließend den Anweisungen im PKCS # 11-Referenzhandbuch richten Sie einen SunPKCS11 -Anbieter ein. Die einzigen Eigenschaften, die ich in meinem Setup bereitstellen musste, sind der Speicherort der nativen "library", die installiert wurde, und das Suffix "name" für diesen Provider. Die Eigenschaft "name" wird an "SunPKCS11-" angehängt. Wenn Sie also "CAC" für den Namen angeben, können Sie die Provider später mit Security.getProvider("SunPKCS11-CAC") suchen.

Dann können Sie die Standard-JSSE-Systemeigenschaften javax.net.ssl.keyStore (mit einem Wert von "NONE" ) und javax.net.ssl.keyStoreType (mit einem Wert von "PKCS11" ) verwenden, um JSSE Zugriff auf das Schlüsselmaterial des CAC zu geben . Sie müssen die Kennworteigenschaft nicht festlegen, da der systemeigene Code den Benutzer bei Bedarf zur Eingabe der PIN auffordern sollte.

Der Vorbehalt besteht darin, dass nur das "End-Entity" -Zertifikat des Benutzers vom CAC verfügbar ist. Um eine vertrauenswürdige Kette aufzubauen, erwarten die meisten Server, dass der Client Zwischenzertifikate sendet. Das zu umgehen ist möglich, aber kompliziert, da es um die Implementierung eines eigenen javax.net.ssl.X509KeyManager geht. Wenn der Server, mit dem Sie arbeiten, eine vollständige Kette benötigt, senden Sie eine weitere Frage.

    
erickson 15.04.2009 18:46
quelle

Tags und Links