Come salvare un certificato SSL del server remoto localmente come file


319

Devo scaricare un certificato SSL di un server remoto (non HTTPS, ma l'handshake SSL dovrebbe essere lo stesso di Google Chrome / IE / wget e arricciare tutti dare errori di controllo del certificato) e aggiungere il certificato come attendibile nei miei laptop Windows " archivio certificati poiché non riesco a convincere i miei ragazzi IT a darmi il certificato CA.

questo è per le comunicazioni d'ufficio, quindi non posso davvero usare il client reale per ottenere il certificato.

Come posso fare, ho Windows 7 e una pila di Linux a portata di mano, quindi qualsiasi linguaggio di script / strumenti va bene.


Per ottenere il certificato di un server di posta , vedere security.stackexchange.com/questions/70528/…
Quel ragazzo brasiliano,

Molto probabilmente, il tuo browser ha una funzione integrata per questo - forse sotto "strumenti di sviluppo".
nobar,

Risposte:


316

Se hai accesso a OpenSSL, prova

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

sostituendo {HOSTNAME} e {PORT} con qualunque sia il tuo valore.


2
Preferisco questa opzione in quanto non devo aprire una GUI e posso farlo tramite SSH dai nostri server.
Bramp

2
Inoltre funziona con protocolli diversi da HTTP.
opaco

14
La soluzione di elec3647 automatizza completamente l'estrazione del PEM in una pipeline di shell.
phs

4
443 è la porta predefinita per HTTPS.
Flimm,

4
Avevo bisogno -servernamedell'opzione per ottenere il certificato host virtuale. gist.github.com/Artistan/5219484efb2fe51cd064175b3d0d5971
Artistan

240

Un metodo rapido per ottenere il certificato estratto e scaricato sarebbe quello di eseguire il comando seguente che convoglia l'output da -showcerts al comando x509 ssl che rimuove semplicemente tutto estraneo. Per esempio:

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

Per utilizzare il certificato, con wget,

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

5
Ho provato questo (su un altro sito Web) - ma era prevista l'intera catena di certificati: sembra che questo abbia riportato solo il primo della catena - è prevedibile?
monojohnny,

8
Per me non funziona: impossibile caricare il certificato 27262: errore: 0906D06C: routine PEM: PEM_read_bio: nessuna linea di partenza: /SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/pem/pem_lib.c: 648: In attesa: AFFIDABILE CERTIFICATO
Janusz,

4
Sono d'accordo con monojohnny, questo non ti dà la catena completa.
Michael Munsey,

4
In ritardo ma @monojohnny: openssl s_client -showcertsvisualizza tutti i certificati nella catena ricevuta (se la connessione ha esito positivo), ma il piping through openssl x509prende solo il primo e scarta il resto. Per ottenerli tutti invece usa ...| sed -n '/^-----BEGIN CERT/,/^-----END CERT/p'o ...| awk '/^-----BEGIN CERT/,/^-----END CERT/'Puoi anche usare un po 'più complicato awkper mettere ogni certificato in un file separato che li rende più facili da usare con openssle alcuni altri strumenti.
dave_thompson_085,

3
usando wget sembra solo salvare a index.html=>HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html.1’
OZZIE il

126

Ad essere sincero, non l'ho mai provato prima (mai necessario), tuttavia, ho appena provato in Firefox e sembra funzionare per il salvataggio:

  1. Fai clic sull'icona del certificato SSL in alto / Lucchetto in basso.
  2. Clic View Certificate
  3. Fai clic sulla Detailsscheda
  4. Scegli quale certificato desideri dalla gerarchia [non cerchiato in figura]
  5. Clic Export

testo alternativo


Buono a sapersi - ma per mia curiosità, puoi spiegare un po 'di più cosa stai cercando di realizzare? Non ho mai avuto bisogno di esportare un certificato client SSL e sono molto curioso di
sapere

1
Questo è un certificato server, non un certificato client. Il motivo principale per esportare una chiave privata e un certificato client è mantenere un backup o se si desidera autenticarsi utilizzando un altro browser o computer.
gbroiles il

@gbroiles - leggi la domanda, ha usato una terminologia sbagliata, ma questo ha risolto il suo problema.
William Hilsum,

1
giusto, e ho risposto alla tua domanda: perché qualcuno dovrebbe voler salvare un certificato client? "Certificato client SSL" era il tuo termine, non il suo.
gbroiles il

1
Non sembra che ci sia un modo per farlo in Chrome, giusto ?!
Fatuhoku,

50

Esportazione di un certificato utilizzando il browser Chrome

  1. Connettiti al sito Web tramite SSL ( https: // qualunque sia )

2. Fare clic sul simbolo del lucchetto, quindi fare clic su Dettagli

  1. Dalla versione 56 di Chrome, procedi come segue: vai al menu Tre punti -> Altri strumenti -> Strumenti per gli sviluppatori, quindi fai clic sulla scheda Sicurezza. Questo ti darà una panoramica della sicurezza con un pulsante Visualizza certificato .

  2. Fai clic sul pulsante Visualizza certificato .

    Si aprirà una finestra modale. Ha due riquadri. Il primo mostra la gerarchia di attendibilità del certificato del sito (l'ultimo elencato), i certificati intermedi e il certificato radice (il più in alto).

    Il secondo riquadro più grande mostra i dettagli di uno dei certificati.

    Potrebbero esserci zero o più certificati intermedi.

    Si noti che il certificato radice ha un'icona bordata d'oro. Gli altri hanno un bordo blu.

    Vedi la schermata qui sotto.

  3. Per esportare un certificato:

    1. Innanzitutto fai clic sull'icona del certificato nella gerarchia di attendibilità.
    2. Il certificato verrà mostrato nella parte principale del modale.
    3. Fai clic sull'icona grande del certificato nella parte principale del modale. Trascina l'icona sul desktop. Chrome copierà quindi il certificato sul desktop.

inserisci qui la descrizione dell'immagine


1
Ho dovuto trascinare l'icona su un editor di testo, il desktop non ha funzionato per me.
Cory Klein,

2
Per Chrome su Windows, dopo aver fatto clic su "Visualizza certificato" il modale è diverso da Mac. Fai clic sulla scheda Dettagli, quindi su Copia su file ... Quindi scegli il formato e il nome file, che è semplice.
PolyTekPatrick,

1
Quando utilizzo Chrome v63 su Mac OS, il file di testo che ottengo trascinando il certificato è leggibile dall'uomo, ma non in alcun formato strutturato che posso capire come convertire in un formato leggibile da una macchina come X.509 .crt.
Jim DeLaHunt il

nessuna differenza se si apre dalla barra degli indirizzi o da questa scheda di sviluppo e non si riesce ancora a scaricare crt ...
user25

1
Non funziona più su Chrome 72.0.3626.121
A. D'Alfonso il

20

Questa è la risposta di Gbroiles , ma volevo sottolineare che il progetto cURL ha una pagina con qualche dettaglio in più sull'uso opensslper salvare il certificato SSL del server remoto:

  • openssl s_client -connect {HOSTNAME}: {PORT} | tee logfile
  • Digitare QUITe premere il tasto Invio / Invio.
  • Il certificato verrà elencato tra i marcatori "INIZIA CERTIFICATO" e "FINE CERTIFICATO".
  • Se vuoi vedere i dati nel certificato, puoi usare:

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

    da dove certfileviene estratto il certificato logfile. Guarda dentro certdata.


Questo ha funzionato per me. Per essere un po 'più esplicito, ho modificato il file di registro e ho ritagliato tutto ciò che era al di fuori del BEGIN CERTIFICATE e END CERTIFICATE e ho salvato il risultato come certfile.pem (non sono sicuro che l'estensione fosse necessaria).
Michael Welch,

16

automatizzato

-servername mi è stato richiesto per ottenere il certificato corretto dall'host virtuale sul nostro server.

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

puoi anche convertire in un certificato per desktop

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

ultima parte è aggiungerlo ai tuoi certificati, non sono sicuro su Windows
per portachiavi mac che ho usato, dovrebbe essere simile ...

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



Nota che alcune applicazioni hanno problemi con i portachiavi System e SystemRoot (Golang, ti guardo), quindi dopo aver installato e impostato l'attendibilità per quei livelli, potresti anche voler copiarlo sul tuo utente login.keychaintramite l' Keychain Accessapp, tu puoi semplicemente cercare il certificato in System / SystemRoot e fare clic e trascinarlo sul tuo loginportachiavi.
dragon788,

1
@ dragon788 - il mio intento era quello di automatizzare questo con la riga di comando e questo funziona per me. Condividi qui se trovi una soluzione per login.keychain anche tramite CLI! Grazie!
Artistan,

a giudicare da ciò che ho letto sul web, credo che l'omissione -ddel comando from si applichi solo al portachiavi utente anziché al portachiavi di sistema.
dragon788,

Se si aggiungono anche certificati intermedi, è necessario utilizzarli trustAsRootanziché trustRootper poterli aggiungere correttamente.
dragon788,

2

Ciò fornirà i risultati contenenti solo i certificati

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

0

Trovato un modo molto più semplice se su Windows. Ho provato Microsoft Edge (pre-cromo) e ho fatto clic sul lucchetto nella barra degli indirizzi -> Visualizza certificato La finestra si apre con un pulsante "Esporta in file", che lo salva come file .crt.

Non userei molto Edge, ma era un gioco da ragazzi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.