Ich versuche, das Zertifikat eines Remote-Servers abzurufen, das ich dann zu meinem Keystore hinzufügen und in meiner Java-Anwendung verwenden kann.
Ein älterer Entwickler (der in den Ferien ist :() hat mir mitgeteilt, dass ich das ausführen kann:
openssl s_client -connect host.host:9999
Um ein Rohzertifikat zu erhalten, das ich dann kopieren und exportieren kann. Ich erhalte folgende Ausgabe:
depth=1 /C=NZ/ST=Test State or Province/O=Organization Name/OU=Organizational Unit Name/CN=Test CA
verify error:num=19:self signed certificate in certificate chain
verify return:0
23177:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1086:SSL alert number 40
23177:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188:
Ich habe es auch mit dieser Option versucht
-showcerts
und dieser (läuft auf Debian wohlgemerkt)
-CApath /etc/ssl/certs/
Aber bekomme den gleichen Fehler.
Diese Quelle sagt, dass ich dieses CApath-Flag verwenden kann, aber es scheint nicht zu helfen. Ich habe mehrere Pfade ohne Erfolg ausprobiert.
Bitte lassen Sie mich wissen, wo ich falsch liege.
quelle
echo "" | openssl s_client -connect server:port -prexit 2>/dev/null | sed -n -e '/BEGIN\ CERTIFICATE/,/END\ CERTIFICATE/ p'
stackoverflow.com/a/12918442/843000echo | openssl s_client -connect server:port 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > cert.pem
sed
mitopenssl x509
und lesen es eine Unterschale mit:openssl x509 -in <(openssl s_client -connect server:port -prexit 2>/dev/null)
echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509
Obwohl ich der Antwort von Ari zustimme (und sie positiv bewertet habe :), musste ich einen zusätzlichen Schritt ausführen, damit sie unter Windows mit Java funktioniert (wo sie bereitgestellt werden musste):
Vor dem Hinzufügen der
openssl x509 -outform DER
Konvertierung wurde von keytool unter Windows eine Fehlermeldung angezeigt, in der über das Format des Zertifikats geklagt wurde. Das Importieren der .der-Datei hat einwandfrei funktioniert.quelle
Es stellt sich heraus, dass hier mehr Komplexität besteht: Ich musste viel mehr Details bereitstellen, um dies ins Rollen zu bringen. Ich denke, es hat etwas mit der Tatsache zu tun, dass es sich um eine Verbindung handelt, die eine Clientauthentifizierung benötigt, und der Hankshake benötigte weitere Informationen, um mit dem Stadium fortzufahren, in dem die Zertifikate ausgegeben wurden.
Hier ist mein Arbeitsbefehl:
Hoffentlich ist dies ein Anstoß in die richtige Richtung für alle, die mehr Informationen brauchen könnten.
quelle
Ein Einzeiler zum Extrahieren des Zertifikats von einem Remote-Server im PEM-Format, diesmal mit
sed
:quelle
-servername
Ich habe nur die Option verpasst und weiß nicht warum, aber ich musste ihn verwenden, um das vollständige Zertifikat zu erhalten.Die einfachste Befehlszeile hierfür, die die PEM-Ausgabe zum Hinzufügen zum Keystore sowie eine von Menschen lesbare Ausgabe enthält und auch SNI unterstützt, was wichtig ist, wenn Sie mit einem HTTP-Server arbeiten, ist:
Die Option -servername dient zum Aktivieren der SNI-Unterstützung, und der openssl x509-Text druckt das Zertifikat in einem für Menschen lesbaren Format.
quelle
Um das Zertifikat des Remote - Servers erhalten Sie verwenden können
openssl
Werkzeug und Sie können es zwischen findenBEGIN CERTIFICATE
undEND CERTIFICATE
welche müssen Sie kopieren und in Ihre Zertifikatsdatei (CRT).Hier ist der Befehl, der dies demonstriert:
Um alle Zertifikate aus der Kette zurückzugeben, fügen Sie einfach
g
(global) wie folgt hinzu :Dann können Sie einfach Ihre Zertifikatdatei (
file.crt
) in Ihren Schlüsselbund importieren und vertrauenswürdig machen, sodass sich Java nicht beschweren sollte.Unter OS X können Sie auf die Datei doppelklicken oder Ihren Schlüsselbundzugriff per Drag & Drop verschieben, damit er in Login / Zertifikaten angezeigt wird. Doppelklicken Sie dann auf das importierte Zertifikat und machen Sie es für SSL immer vertrauenswürdig .
Unter CentOS 5 können Sie sie an eine
/etc/pki/tls/certs/ca-bundle.crt
Datei anhängen (und ausführensudo update-ca-trust force-enable
:) oder in CentOS 6 in eine Datei kopieren/etc/pki/ca-trust/source/anchors/
und ausführensudo update-ca-trust extract
.Kopieren Sie sie in Ubuntu in
/usr/local/share/ca-certificates
und führen Sie sie aussudo update-ca-certificates
.quelle
quelle
So drucken Sie nur die Zertifikatkette und nicht das Zertifikat des Servers:
So aktualisieren Sie die CA-Vertrauenswürdigkeit unter CentOS / RHEL 6/7:
unter CentOS / RHEL 5:
quelle
Sie können das Server-Stammzertifikat mit dem nächsten Bash-Skript abrufen und speichern:
Überschreiben Sie einfach die erforderlichen Variablen.
quelle
Wenn Ihr Server ein E-Mail-Server ist (MS Exchange oder Zimbra), müssen Sie möglicherweise die
starttls
undsmtp
-Flaggen hinzufügen :openssl s_client -starttls smtp -connect HOST_EMAIL:SECURE_PORT 2>/dev/null </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > CERTIFICATE_NAME.pem
Wo,
HOST_EMAIL ist die Serverdomäne , z. B. mail-server.com.
SECURE_PORT ist der Kommunikationsport, z. B. 587 oder 465
Dateiname der CERTIFICATE_NAME- Ausgabe (BASE 64 / PEM-Format)
quelle
Für andere wie mich, die beim Zugriff auf AWS CloudFront versucht haben, den guten Ratschlägen zu folgen, aber fehlgeschlagen sind, besteht der Trick darin, sie hinzuzufügen
-servername domain.name..
.Quelle: https://serverfault.com/a/780450/8972
quelle