Während der Entwicklung eines Java-Webservice-Clients bin ich auf ein Problem gestoßen. Die Authentifizierung für den Webservice erfolgt über ein Client-Zertifikat, einen Benutzernamen und ein Kennwort. Das Client-Zertifikat, das ich von der Firma hinter dem Webservice erhalten habe, ist im .cer
Format. Wenn ich die Datei mit einem Texteditor überprüfe, hat sie folgenden Inhalt:
-----BEGIN CERTIFICATE-----
[Some base64 encoded data]
-----END CERTIFICATE-----
Ich kann diese Datei als Zertifikat in Internet Explorer importieren (ohne ein Passwort eingeben zu müssen!) Und sie zur Authentifizierung beim Webservice verwenden.
Ich konnte dieses Zertifikat in einen Schlüsselspeicher importieren, indem ich zuerst die erste und letzte Zeile entfernte, in Unix-Zeilenumbrüche konvertierte und eine base64-Dekodierung ausführte. Die resultierende Datei kann (mit dem keytool
Befehl) in einen Schlüsselspeicher importiert werden . Wenn ich die Einträge im Keystore aufführe, ist dieser Eintrag vom Typ trustedCertEntry
. Aufgrund dieses Eintragstyps (?) Kann ich dieses Zertifikat nicht zur Authentifizierung beim Webservice verwenden. Ich fange an zu denken, dass das bereitgestellte Zertifikat ein öffentliches Zertifikat ist, das zur Authentifizierung verwendet wird ...
Eine Problemumgehung, die ich gefunden habe, besteht darin, das Zertifikat in den IE zu importieren und als .pfx
Datei zu exportieren . Diese Datei kann als Keystore geladen und zur Authentifizierung beim Webservice verwendet werden. Ich kann jedoch nicht erwarten, dass meine Kunden diese Schritte jedes Mal ausführen, wenn sie ein neues Zertifikat erhalten. Daher möchte ich die .cer
Datei direkt in Java laden . Irgendwelche Gedanken?
Zusätzliche Informationen: Das Unternehmen hinter dem Webservice teilte mir mit, dass das Zertifikat (über den Internet Explorer und die Website) vom PC und dem Benutzer angefordert werden sollte, der das Zertifikat später importieren würde.
quelle
Das Importieren der
.cer
vom Browser heruntergeladenen Zertifikatdatei (öffnen Sie die URL und suchen Sie nach Details) in den Cacerts- Keystorejava_home\jre\lib\security
funktionierte für mich, im Gegensatz zu Attemps zum Generieren und Verwenden meines eigenen Keystores.java_home\jre\lib\security
cmd
und CTRL+ SHIFT+ENTERyourAliasName
undpath\to\certificate.cer
respectively)Auf diese Weise müssen Sie keine zusätzlichen JVM-Optionen angeben, und das Zertifikat sollte von der JRE erkannt werden.
quelle
java_home\jdk_x.xx\jre\lib\security
für einen absoluten Pfad Backslash verwendet wird, z. B."C:\myCert.crt"
Anführungszeichen sind optional, wenn der Pfad keine Leerzeichen enthält.Hier ist der Code, den ich zum programmgesteuerten Importieren von CER-Dateien in einen neuen KeyStore verwendet habe.
quelle
Sie sollten keine Änderungen am Zertifikat vornehmen müssen. Sind Sie sicher, dass Sie den richtigen Importbefehl ausführen?
Folgendes funktioniert für mich:
wo mycert.cer enthält:
quelle
Ein Open-Source-GUI-Tool ist unter keystore-explorer.org verfügbar
Die folgenden Bildschirme helfen (sie stammen von der offiziellen Website)
Standardbildschirm, den Sie durch Ausführen des Befehls erhalten:
Gehen Sie zu
Examine
undExamine a URL
Option und geben Sie dann die Web-URL an, die Sie importieren möchten.Das Ergebnisfenster sieht wie folgt aus, wenn Sie einen Link zur Google-Website angeben.
Dies ist einer der Anwendungsfälle und der Rest liegt beim Benutzer (alle Credits gehen an keystore-explorer.org ).
quelle
Das Zertifikat, über das Sie bereits verfügen, ist wahrscheinlich das Serverzertifikat oder das Zertifikat, mit dem das Serverzertifikat signiert wird. Sie benötigen es, damit Ihr Webdienst-Client den Server authentifizieren kann.
Wenn Sie jedoch zusätzlich eine Clientauthentifizierung mit SSL durchführen müssen, benötigen Sie ein eigenes Zertifikat, um Ihren Webdienstclient zu authentifizieren. Dazu müssen Sie eine Zertifikatsanforderung erstellen. Der Prozess umfasst das Erstellen Ihres eigenen privaten Schlüssels und des entsprechenden öffentlichen Schlüssels sowie das Anhängen dieses öffentlichen Schlüssels zusammen mit einigen Ihrer Informationen (E-Mail, Name, Domänenname usw.) an eine Datei, die als Zertifikatanforderung bezeichnet wird. Anschließend senden Sie diese Zertifikatanforderung an das Unternehmen, das Sie bereits danach gefragt hat. Dieses erstellt Ihr Zertifikat, indem es Ihren öffentlichen Schlüssel mit seinem privaten Schlüssel signiert, und sendet Ihnen eine X509-Datei mit Ihrem Zertifikat zurück, die Sie verwenden können Fügen Sie jetzt Ihren Keystore hinzu, und Sie können über SSL, das eine Clientauthentifizierung erfordert, eine Verbindung zu einem Webdienst herstellen.
Verwenden Sie zum Generieren Ihrer Zertifikatanforderung "keytool -certreq -alias -file -keypass -keystore". Senden Sie die resultierende Datei an das Unternehmen, das sie signieren wird.
Wenn Sie Ihr Zertifikat zurückerhalten, führen Sie "keytool -importcert -alias -keypass -keystore" aus.
In beiden Fällen müssen Sie möglicherweise -storepass verwenden, wenn der Keystore geschützt ist (was eine gute Idee ist).
quelle
Hier ist ein Skript, mit dem ich eine Reihe von CRT-Dateien im aktuellen Verzeichnis stapelweise in den Java-Keystore importiert habe. Speichern Sie dies einfach in demselben Ordner wie Ihr Zertifikat und führen Sie es folgendermaßen aus:
import_all_certs.sh
quelle
So hat das bei mir funktioniert:
quelle