Voglio scaricare il certificato SSL da, diciamo https://www.google.com , usando wget o altri comandi. Qualche riga di comando unix? wget o openssl?
Voglio scaricare il certificato SSL da, diciamo https://www.google.com , usando wget o altri comandi. Qualche riga di comando unix? wget o openssl?
Risposte:
Per scaricare il certificato, è necessario utilizzare il client integrato in openssl in questo modo:
echo -n | openssl s_client -connect HOST:PORTNUMBER \
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert
Ciò salverà il certificato in /tmp/$SERVERNAME.cert
.
È possibile utilizzare -showcerts
se si desidera scaricare tutti i certificati nella catena. Ma se vuoi solo scaricare il certificato del server, non è necessario specificare-showcerts
echo -n
fornisce una risposta al server, in modo che la connessione venga rilasciata
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
rimuove le informazioni sulla catena di certificati e i dettagli di connessione. Questo è il formato preferito per importare il certificato in altri keystore.
-showcerts
mostrare il CERT del server / foglia troppo? Ho pensato che visualizzava i prodotti intermedi solo quando quel commutatore era incluso.
s_client
mostra sempre il server cert (se ce n'è uno, ovvero il server risponde a ciao e non sceglie una suite anonima). -showcerts
mostra tutti i certificati ricevuti, prima il server cert poi gli intermedi e / o il root.
Ho trovato la risposta Openssl lo fornisce.
openssl s_client -connect $ {REMHOST}: $ {REMPORT}
openssl x509 -text <<EOF cert-text EOF
per vedere i dettagli del certificato
sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pem
per gentile concessione di serverfault.com/questions/139728/…
Lo strumento client GNUTLSgnutls-cli
, inoltre, può semplificare:
gnutls-cli --print-cert www.example.com \
< /dev/null \
> www.example.com.certs
Il programma è progettato per fornire un client interattivo al sito, quindi è necessario dargli un input vuoto (in questo esempio, da /dev/null
) per terminare la sessione interattiva.
basato sulla risposta di @bignose, ecco una versione autonoma che si adatta bene ad esempio a una ricetta da chef:
sudo apt-get install gnutls-bin
gnutls-cli --print-cert myserver.com </dev/null| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > myserver.crt
sudo cp myserver.crt /usr/local/share/ca-certificates/myserver.crt
sudo update-ca-certificates
true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509
questa modalità di openssl prevede stdin, quindi lo forniamo tramite true |
, questo si collega al server specificato nel parametro -connect. 2>/dev/null
elimina gli errori (facoltativo), possiamo passare l'intero output nel parser x509, specificando /dev/stdin
di usare la shell pipe come file di input. E che l'uscita sarà solo la -----BEGIN CERTIFICATE-----
alla -----END CERTIFICATE-----
porzione di s_client
uscita. Puoi reindirizzarlo a un file aggiungendolo > google.com.pem
alla fine del comando.
Come meglio posso dire, questo non verifica la catena di certificati, ma può solo dirti quale identità SSL fornisce il server finale.
x509
legge stdin di default, quindi -in /dev/stdin
è ridondante (3) s_client
verifica che il cert del server si colleghi correttamente a un ancoraggio di fiducia locale (root) e non sia scaduto, ma hai ha soppresso le informazioni che mostrerebbero questo (4) NON controlla la revoca (5) controlla il nome nel certificato del server solo in 1.0.2 e quindi non per impostazione predefinita (ma puoi verificarlo facilmente guardando il certificato in seguito)