wake-up-neo.net

Fehler beim Importieren des SSL-Zertifikats: Kein X.509-Zertifikat

Ich versuche, das SSL-Zertifikat gemäß diesem Beitrag . zu aktualisieren. 

Ich bin Noob in Zertifikaten, also folgte ich diesem Leitfaden . Aber wenn ich eintrete 

keytool -keystore mycacerts -storepass changeit -importcert -file "C:\Users\Noks\Desktop\cacerts.pem" -v

Ich bekomme den Fehler:

keytool error: Java.lang.Exception: Input not an X.509 certificate
Java.lang.Exception: Input not an X.509 certificate
        at Sun.security.tools.KeyTool.addTrustedCert(KeyTool.Java:1913)
        at Sun.security.tools.KeyTool.doCommands(KeyTool.Java:818)
        at Sun.security.tools.KeyTool.run(KeyTool.Java:172)
        at Sun.security.tools.KeyTool.main(KeyTool.Java:166)

Wie kann ich das beheben?

31
nikel

Enthält Ihre Datei cacerts.pem ein einzelnes Zertifikat? Da es sich um ein PEM handelt, schaut es euch an, es sollte mit anfangen 

-----BEGIN CERTIFICATE-----

und enden mit

-----END CERTIFICATE-----

Um zu überprüfen, ob es nicht beschädigt ist, greifen Sie openssl zur Hand und drucken Sie seine Details mit

openssl x509 -in cacerts.pem -text

32
Bruno Grieder

Viele Zertifizierungsstellen stellen ein Zertifikat im PKCS7-Format bereit.

Laut Oracle-Dokumentation kann der Befehl keytool PKCS # 7 verarbeiten, manchmal schlägt er jedoch fehl

Der Befehl keytool kann X.509 v1-, v2- und v3-Zertifikate und .__ importieren. PKCS # 7-formatierte Zertifikatsketten, die aus Zertifikaten dieser .__ bestehen. Art. Die Daten, die importiert werden sollen, müssen entweder binär .__ bereitgestellt werden. Codierungsformat oder in druckfähigem Codierungsformat (auch als Base64 Encoding bezeichnet), wie im Internet-Standard RFC 1421 definiert. In Letzterem In diesem Fall muss die Codierung am Anfang durch eine Zeichenfolge mit der Zeichenfolge .__ begrenzt sein. beginnt mit ----- BEGIN und wird am Ende durch eine Zeichenfolge begrenzt, die .__ beginnt. mit ----- ENDE.

Wenn die PKCS7-Datei nicht importiert werden kann, versuchen Sie, sie von PKCS7 nach X.509 zu transformieren:

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
29
superlazy

Dies scheint ein alter Thread zu sein, aber ich werde hier meine Erfahrung hinzufügen. Ich habe auch versucht, ein Zertifikat zu installieren und habe diesen Fehler erhalten. Ich öffnete dann die CER-Datei mit einem Texteditor und bemerkte, dass am Ende jeder Zeile ein zusätzliches Leerzeichen (Zeichen) vorhanden ist. Durch das Entfernen dieser Zeilen konnte ich das Zertifikat importieren.

Hoffe, das ist jemand anderem etwas wert.

4
XDanny322

Ich werde auch meine Erfahrung hier hinzufügen, falls es jemandem hilft:

Bei der Arbeit verwenden wir im Allgemeinen die folgenden zwei Befehle, damit IntelliJ IDEA mit verschiedenen Servern kommunizieren kann, beispielsweise mit unseren internen Maven-Repositorys:

[Elevated]C:\Program Files\JetBrains\IntelliJ IDEA {version}\jre64>bin\keytool 
    -printcert -rfc -sslserver maven.services.{our-company}.com:443 > public.crt

[Elevated]C:\Program Files\JetBrains\IntelliJ IDEA {version}\jre64>bin\keytool
    -import -storepass changeit -noprompt -trustcacerts -alias services.{our-company}.com 
    -keystore lib\security\cacerts -file public.crt

Nun passiert es manchmal, dass der keytool -printcert-Befehl aufgrund temporärer Verbindungsprobleme nicht in der Lage ist, mit der Außenwelt zu kommunizieren, z. B. weil die Firewall dies verhindert, und der Benutzer vergessen hat, sein VPN zu starten. Es ist eine Tatsache des Lebens, dass dies passieren kann. Das ist eigentlich nicht das Problem.

Das Problem ist, dass, wenn das blöde Tool auf einen solchen Fehler stößt, die Fehlermeldung nicht an das Standardfehlergerät ausgegeben wird, sondern an das Standardausgabegerät!

Also, was passiert am Ende:

  • Wenn Sie den ersten Befehl ausführen, wird keine Fehlermeldung angezeigt, sodass Sie nicht wissen, dass der Befehl fehlgeschlagen ist. Anstelle eines Schlüssels enthält die public.crt-Datei jetzt eine Fehlernachricht, die keytool error: Java.lang.Exception: No certificate from the SSL server sagt.
  • Wenn Sie den zweiten Befehl ausführen, findet er eine Fehlermeldung anstelle eines Schlüssels in public.crt. Er schlägt also fehl und sagt keytool error: Java.lang.Exception: Input not an X.509 certificate.

Die letzte Zeile lautet: nach keytool -printcert ... > public.crt sollten Sie immer den Inhalt von public.crt ausgeben, um sicherzustellen, dass es sich tatsächlich um einen Schlüssel und nicht um eine Fehlermeldung handelt, bevor Sie mit der Ausführung von keytool -import ... -file public.crt fortfahren.

1
Mike Nakis

Ich habe 3 Dinge geändert und dann funktioniert es:

  1. Es gibt eine Spalte mit Leerzeichen, ich habe sie entfernt
  2. Der Zeilenumbruch von Windows CRLF zu Linux LF wurde geändert
  3. Die leere Zeile am Ende wurde entfernt.
0
LingYan Meng