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?
J'ai trouvé la réponse. Openssl le fournit.
openssl s_client -connect $ {REMHOST}: $ {REMPORT}
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.
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.
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.
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
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