So speichern Sie ein Remote-Server-SSL-Zertifikat lokal als Datei


319

Ich muss ein SSL-Zertifikat eines Remoteservers herunterladen (nicht HTTPS, aber der SSL-Handshake sollte mit dem von Google Chrome / IE / wget identisch sein und alle Fehler bei der Zertifikatsprüfung verursachen) und das Zertifikat als vertrauenswürdig in meinen Laptops hinzufügen. Windows ' Zertifikatsspeicher, da ich meine IT-Mitarbeiter nicht dazu bringen kann, mir das CA-Zertifikat zu geben.

Dies ist für die Bürokommunikation, so dass ich den tatsächlichen Client nicht wirklich verwenden kann, um das Zertifikat zu erhalten.

Wie mache ich das? Ich habe Windows 7 und einen Stapel Linuxe zur Hand, so dass jede Tool- / Skriptsprache in Ordnung ist.


Das Zertifikat eines Mailservers finden Sie unter security.stackexchange.com/questions/70528/…
That Brazilian Guy

Höchstwahrscheinlich verfügt Ihr Browser über eine integrierte Funktion - möglicherweise unter "Entwicklertools".
22.

Antworten:


316

Wenn Sie Zugriff auf OpenSSL haben, versuchen Sie es

openssl s_client -connect {HOSTNAME}:{PORT} -showcerts

Ersetzen Sie {HOSTNAME} und {PORT} durch Ihre Werte.


2
Ich bevorzuge diese Option, da ich keine GUI öffnen muss und dies über SSH von unseren Servern aus tun kann.
Bramp

2
Außerdem funktioniert es für andere Protokolle als HTTP.
Matt

14
Die Lösung von elec3647 automatisiert das Extrahieren der PEM in einer Shell-Pipeline vollständig.
phs

4
443 ist der Standardport für HTTPS.
Flimm

4
Ich brauchte eine -servernameOption, um das virtuelle Host-Zertifikat zu erhalten. gist.github.com/Artistan/5219484efb2fe51cd064175b3d0d5971
Artistan

240

Eine schnelle Methode, um das Zertifikat abzurufen und herunterzuladen, besteht darin, den folgenden Befehl auszuführen, der die Ausgabe von den -showcerts an den x509 ssl-Befehl weiterleitet, der nur alles überflüssige entfernt. Zum Beispiel:

openssl s_client -showcerts -connect server.edu:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >mycertfile.pem

So verwenden Sie das Zertifikat mit wget:

wget https:/server.edu:443/somepage --ca-certificate=mycertfile.pem

5
Ich habe es versucht (auf einer anderen Website) - aber es wurde erwartet, dass die gesamte Kette von Zertifikaten vorhanden ist: Scheint, dass dies nur das erste in der Kette zurückbringt - ist das zu erwarten?
Monojohnny

8
Das funktioniert bei mir nicht: Zertifikat 27262 kann nicht geladen werden: Fehler: 0906D06C: PEM-Routinen: PEM_read_bio: Keine Startzeile: /SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/pem/pem_lib.c: 648: Wird erwartet: TRUSTED ZERTIFIKAT
Janusz

4
Ich stimme monojohnny zu, das gibt dir nicht die volle Kette.
Michael Munsey

4
Spät aber @monojohnny: Zeigt openssl s_client -showcertsalle Zertifikate in der empfangenen Kette an (wenn die Verbindung erfolgreich ist), aber das Durchleiten openssl x509nimmt nur das erste und verwirft den Rest. Um sie alle zu erhalten, verwenden Sie stattdessen ...| sed -n '/^-----BEGIN CERT/,/^-----END CERT/p'oder. ...| awk '/^-----BEGIN CERT/,/^-----END CERT/'Sie können auch ein etwas komplizierteres verwenden awk, um jedes Zertifikat in einer separaten Datei abzulegen, wodurch die Verwendung mit opensslund einigen anderen Tools vereinfacht wird .
Dave_thompson_085

3
mit wget scheint es nur ein zu retten index.html=>HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html.1’
OZZIE

126

Um ehrlich zu sein, ich habe dies noch nie versucht (musste es noch nie tun), aber ich habe es gerade in Firefox versucht und es scheint zum Speichern zu funktionieren:

  1. Klicken Sie oben auf das Symbol für das SSL-Zertifikat / unten auf das Vorhängeschloss.
  2. Klicken View Certificate
  3. Klicken Sie auf die DetailsRegisterkarte
  4. Wählen Sie das gewünschte Zertifikat aus der Hierarchie [nicht im Bild eingekreist]
  5. Klicken Export

Alt-Text


Gut zu wissen - aber können Sie mir aus Neugier ein bisschen mehr erklären, was Sie erreichen wollen? Ich musste noch nie ein SSL-Client-Zertifikat exportieren und bin sehr gespannt, warum Sie das tatsächlich tun müssten ...
William Hilsum

1
Das ist ein Server-Zertifikat, kein Client-Zertifikat. Der Hauptgrund für den Export eines privaten Schlüssels und Zertifikats eines Clients ist die Sicherung oder die Authentifizierung mit einem anderen Browser oder Computer.
Gbroiles

@gbroiles - lies die Frage, er verwendete die falsche Terminologie, aber dies löste sein Problem.
William Hilsum

1
richtig, und ich beantwortete Ihre Frage - warum sollte jemand ein Client-Zertifikat speichern wollen? "SSL-Client-Zertifikat" war Ihr Begriff, nicht sein.
Gbroiles

1
Sieht nicht so aus, als gäbe es in Chrome eine Möglichkeit, dies zu tun, oder ?!
Fatuhoku

50

Exportieren eines Zertifikats mit dem Chrome-Browser

  1. Stellen Sie über SSL eine Verbindung zur Website her ( https: // whatever )

2. Klicken Sie auf das Schlosssymbol und dann auf Details

  1. Seit Chrome Version 56 gehen Sie wie folgt vor: Gehen Sie zum Menü Drei Punkte -> Weitere Tools -> Entwicklertools und klicken Sie auf die Registerkarte Sicherheit. Dadurch erhalten Sie eine Sicherheitsübersicht mit der Schaltfläche Zertifikat anzeigen.

  2. Klicken Sie auf die Schaltfläche Zertifikat anzeigen.

    Ein modales Fenster wird geöffnet. Es hat zwei Scheiben. Das oberste zeigt die Vertrauenshierarchie des Zertifikats der Site (das zuletzt aufgeführte Zertifikat), des Zwischenzertifikats und des Stammzertifikats (das oberste Zertifikat).

    Der zweite, größere Bereich zeigt die Details eines der Zertifikate.

    Es können null oder mehr Zwischenzertifikate vorhanden sein.

    Beachten Sie, dass das Stammzertifikat ein goldgerahmtes Symbol aufweist. Die anderen haben einen blauen Rand.

    Siehe den Screenshot unten.

  3. So exportieren Sie ein Zertifikat:

    1. Klicken Sie zuerst auf das Zertifikatssymbol in der Vertrauenshierarchie.
    2. Das Zertifikat wird im Hauptteil des Modals angezeigt.
    3. Klicken Sie auf das große Symbol des Zertifikats im Hauptteil des Modals. Ziehen Sie das Symbol auf Ihren Desktop. Chrome kopiert das Zertifikat dann auf Ihren Desktop.

Bildbeschreibung hier eingeben


1
Ich musste das Symbol in einen Texteditor ziehen, der Desktop funktionierte bei mir nicht.
Cory Klein

2
Wenn Sie in Chrome unter Windows auf "Zertifikat anzeigen" klicken, unterscheidet sich das Modal vom Mac. Klicken Sie auf die Registerkarte Details und dann auf In Datei kopieren. Wählen Sie dann das Format und den Dateinamen aus, was unkompliziert ist.
PolyTekPatrick

1
Wenn ich Chrome v63 unter Mac OS verwende, ist die Textdatei, die ich beim Ziehen des Zertifikats erhalte, für Menschen lesbar, jedoch nicht in einem strukturierten Format, mit dem ich herausfinden kann, wie sie in eine maschinenlesbare Form wie X.509 .crt konvertiert werden kann.
Jim DeLaHunt

Kein Unterschied, wenn Sie über die Adressleiste oder über diesen Entwickler-Tab öffnen und
CRT

1
Funktioniert nicht mehr in Chrome 72.0.3626.121
A. D'Alfonso

20

Dies ist gbroiles' Antwort , aber ich wollte darauf hinweisen, dass die cURL Projekt eine Seite mit ein paar mehr Details hat über die Verwendung openssldes Remote - Servers SSL - Zertifikat zu speichern:

  • openssl s_client -connect {HOSTNAME}: {PORT} | tee logfile
  • Typ QUITund drücken Sie die Enter / Return - Taste.
  • Das Zertifikat wird zwischen den Markierungen "BEGIN CERTIFICATE" und "END CERTIFICATE" aufgeführt.
  • Wenn Sie die Daten im Zertifikat anzeigen möchten, können Sie Folgendes verwenden:

    openssl x509 -inform PEM -in certfile -text -out certdata

    wobei certfiledas Zertifikat extrahiert aus logfile. Schau rein certdata.


Das hat bei mir funktioniert. Um etwas genauer zu sein, habe ich die Protokolldatei bearbeitet und alles gekürzt, was sich außerhalb von BEGIN CERTIFICATE und END CERTIFICATE befand, und das Ergebnis als certfile.pem gespeichert (nicht sicher, ob die Erweiterung erforderlich war).
Michael Welch

16

automatisiert

-servername war erforderlich, damit ich das richtige Zertifikat vom virtuellen Host auf unserem Server erhalten konnte.

openssl s_client -showcerts -connect host.name.com:443 -servername host.name.com </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > host.name.com.pem

Sie können auch in ein Zertifikat für den Desktop konvertieren

openssl x509 -inform PEM -in host.name.com.pem -outform DER -out host.name.com.cer

Der letzte Teil ist, es zu Ihren Zertifikaten hinzuzufügen.
Ich bin mir nicht sicher, ob es unter Windows für Mac-Schlüsselbunde ähnlich sein sollte.

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain host.name.com.cer



Beachten Sie, dass einige Anwendungen Probleme mit den System- und SystemRoot-Schlüsselanhängern haben (Golang, ich schaue auf DICH). Nachdem Sie die Vertrauensstufe für diese Ebenen installiert und festgelegt haben, möchten Sie sie möglicherweise auch login.keychainüber die Keychain AccessApp auf Ihren eigenen Benutzer kopieren Navigieren Sie einfach zu dem Zertifikat in System / SystemRoot und klicken Sie darauf und ziehen Sie es auf Ihren loginSchlüsselbund.
Dragon788

1
@ dragon788 - ich wollte das mit der Kommandozeile automatisieren und das funktioniert bei mir. Bitte teilen Sie uns hier mit, wenn Sie eine Lösung für login.keychain via CLI finden! Vielen Dank!
Artistan

Nach dem zu urteilen, was ich im Internet gelesen habe, gilt das Auslassen des -dBefehls meines Erachtens nur für den Benutzerschlüsselbund anstelle des Systemschlüsselbunds.
Dragon788

Wenn Sie auch ein Zwischenzertifikat (e) hinzufügen wollen Sie verwenden trustAsRootstatt , trustRootdamit es richtig hinzugefügt werden.
Dragon788

2

Dies gibt die Ergebnisse, die nur die Zertifikate enthalten

echo QUIT | \
openssl s_client -showcerts -connect hostname:port | \
awk '/-----BEGIN CERTIFICATE-----/ {p=1}; p; /-----END CERTIFICATE-----/ {p=0}' "

0

Eine viel einfachere Möglichkeit gefunden, wenn unter Windows. Versuchte Microsoft Edge (Pre-Chrom) und klickte auf das Schloss in der Adressleiste -> Zertifikat anzeigen Dialog öffnet sich mit einer Schaltfläche "In Datei exportieren", die es als .crt-Datei speichert.

Nicht viel, wofür ich Edge verwenden würde, aber das war ein Kinderspiel.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.