Je veux télécharger le certificat ssl à partir de, par exemple https://www.google.com en utilisant wget ou toute autre commande. Une ligne de commande unix ? wget ou openssl ?
Réponses
Trop de publicités?Afin de télécharger le certificat, vous devez utiliser le client intégré à openssl comme suit :
echo -n | openssl s_client -connect $HOST:$PORTNUMBER -servername $SERVERNAME \
| openssl x509 > /tmp/$SERVERNAME.cert
Cela permettra d'enregistrer le certificat dans /tmp/$SERVERNAME.cert
.
El -servername
est utilisé pour sélectionner le bon certificat lorsque plusieurs sont présentés, dans le cas de SNI.
Vous pouvez utiliser -showcerts
si vous voulez télécharger tous les certificats de la chaîne. Mais si vous voulez seulement télécharger le certificat du serveur, il n'est pas nécessaire de spécifier -showcerts
. Le site x509
à la fin supprimera les certitudes intermédiaires, vous devrez utiliser sed -n '/-----BEGIN/,/-----END/p'
au lieu du x509 à la fin.
echo -n
donne une réponse au serveur, de sorte que la connexion est libérée.
openssl x509
supprime les informations sur la chaîne de certificats et les détails de la connexion. C'est le format préféré pour importer le certificat dans d'autres keystores.
El GNUTLS outil client, gnutls-cli
peut également faciliter les choses :
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 des entrées vides (dans cet exemple, de la part de /dev/null
) pour mettre fin à la session interactive.
true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509
ce mode d'openssl attend stdin, donc nous le fournissons par l'intermédiaire de true |
ce qui permet de se connecter au serveur spécifié dans le paramètre -connect. 2>/dev/null
supprime 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 produira juste le -----BEGIN CERTIFICATE-----
a -----END CERTIFICATE-----
partie de la s_client
sortie. Vous pouvez rediriger cela vers un fichier en ajoutant > google.com.pem
à la fin de la commande.
D'après ce que je sais, cela ne vérifie pas la chaîne de certificats, mais seulement l'identité ssl fournie par le serveur final.
Basé sur la réponse de @bignose, voici une version autonome qui s'intègre bien dans une recette de chef par exemple :
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
- Réponses précédentes
- Plus de réponses