web-dev-qa-db-fra.com

comment télécharger le certificat ssl depuis un site web?

Je souhaite télécharger le certificat SSL depuis, par exemple https://www.google.com , en utilisant wget ou toute autre commande. Une ligne de commande Unix? wget ou openssl?

192
RainDoctor

J'ai trouvé la réponse. Openssl le fournit.

openssl s_client -connect $ {REMHOST}: $ {REMPORT}

59
RainDoctor

Pour télécharger le certificat, vous devez utiliser le client intégré à openssl comme ceci:

echo -n | openssl s_client -connect Host:PORTNUMBER \
    | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert

Cela enregistrera le certificat dans /tmp/$SERVERNAME.cert.

Vous pouvez utiliser -showcerts si vous souhaitez télécharger tous les certificats de la chaîne. Mais si vous souhaitez simplement télécharger le certificat du serveur, il n'est pas nécessaire de spécifier -showcerts

echo -n donne une réponse au serveur, afin que la connexion soit libérée

sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' supprime les informations sur la chaîne de certificats et les détails de connexion. Il s'agit du format préféré pour importer le certificat dans d'autres magasins de clés.

258
Sean Reifschneider

L'outil client GNUTLS , gnutls-cli, peut aussi vous faciliter la tâche:

gnutls-cli --print-cert www.example.com \
        < /dev/null \
        > www.example.com.certs

Le programme est conçu pour fournir un client interactif au site, vous devez donc lui donner une entrée vide (dans cet exemple, à partir de /dev/null) pour terminer la session interactive.

23
bignose
true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509

ce mode d'opensl attend stdin, donc nous le fournissons via true |, ceci se connecte au serveur spécifié dans le paramètre -connect. 2>/dev/null fait taire les erreurs (facultatif), nous pouvons passer la sortie entière dans l'analyseur x509, en spécifiant /dev/stdin pour utiliser le tube Shell comme fichier d'entrée. Et cela ne produira que le -----BEGIN CERTIFICATE----- à -----END CERTIFICATE----- partie du s_client production. Vous pouvez rediriger cela vers un fichier en ajoutant > google.com.pem à la fin de la commande.


Du mieux que je puisse dire, cela ne vérifie pas la chaîne de certificats, il ne peut que vous dire quelle identité SSL le serveur final fournit.

9
ThorSummoner

sur la base de la réponse @bignose, voici une version autonome qui s'intègre bien dans par exemple une recette de 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
9
oDDsKooL

Syntaxe alternative utilisant Ex et substitution de processus:

ex +'/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq > file.crt
0
kenorb