Frage

Ich versuche, die SSL-Kommunikation von einem Web-Service-Client (Axis2) mit dem Zertifikat auf dem Benutzer CAC-Karte zu aktivieren. Funktioniert wie ein Zauber .... bis der Webserver CAC aktiviert. An diesem Punkt der SSL-Verbindung wird mit der Fehlermeldung abgewiesen, dass die anderen Zertifikate in der Kette wurden nicht berücksichtigt.

Ich habe dafür gesorgt, dass sich der Anbieter zur Verfügung steht, entweder indem sie sie in die security.properties Datei hinzufügen oder es programmatisch zu schaffen.

Mein aktueller Ansatz ist es, einfach die Systemeigenschaften festgelegt:     System.setProperty ( "javax.net.ssl.keyStore", "NONE");     System.setProperty ( "javax.net.ssl.keyStoreType", "PKCS11");

ich von this Frage / Antwort, dass dieser Ansatz nur das „Endentität“ Zertifikat sendet. Anscheinend muß ich meinen eigenen X509KeyManager implementieren. Das ist Neuland für mich, kann jemand eine gute Referenz vorschlagen oder liefert Beispiele, wie dies zu tun?

Schätzen Sie die Hilfe.

War es hilfreich?

Lösung

Die beste Schlüssel-Manager Implementierung hängt von den Emittenten der Zertifikate, die Sie verwenden erwarten.

Wenn das Zertifikat auf der CAC des Benutzers immer von einem bestimmten CA ausgestellt werden, speichern Sie einfach, dass Zertifikat des Emittenten und alle Zwischenzertifikate weiter oben in der Kette in einer PKCS # 7-Datei. In der getCertificateChain() Methode kann diese Sammlung blind Zertifikat des Benutzers und zurückgegeben angehängt werden.

Wenn die Dinge nicht ganz so einfach, aber eine vollständige Liste der möglichen Emittenten aufgezählt werden können, erhalten alle ihre Zertifikate und ihre Emittenten Zertifikate und so weiter, bis zu den Stammzertifikate .

alle der Root-Zertifikate zu einem Schlüsselspeicher als vertrauenswürdige Einträge hinzufügen. Bündeln Sie die Zwischenzertifikate in einer PKcs # 7-Format-Datei.

X509KeyManager ( oder erweitern X509ExtendedKeyManager , wenn Sie‘ wieder mit SSLEngine arbeiten). Insbesondere wird in der getCertificateChain() Methode, erhalten Sie eine vertraute Wurzeln die Zertifikate in Trust Store sind, die Sie erstellt; die Zwischenzertifikate können geladen aus der PKCS # 7-Datei und hinzugefügt, um die Builder-Parameter. Sobald die Kette aufgebaut, erhalten das Zertifikat Pfad und wandeln es in ein Array . Dies ist das Ergebnis der getCertificateChain() Methode.

Wenn Sie können nicht vorhersagen, die das Zertifikat des Benutzers Ausstellung wird, könnten Sie in der Lage sein, die Zwischenzertifikate zur Laufzeit aus einem LDAP-Verzeichnis oder ein anderes Repository zu erhalten. Das ist ein ganz neues Niveau der Schwierigkeit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top