Je souhaite télécharger le certificat SSL à partir de, disons https://www.google.com , à l'aide de wget ou de toute autre commande. Une ligne de commande unix? wget ou openssl?
Je souhaite télécharger le certificat SSL à partir de, disons https://www.google.com , à l'aide de wget ou de toute autre commande. Une ligne de commande unix? wget ou openssl?
Réponses:
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 permettra d'économiser le certificat /tmp/$SERVERNAME.cert.
Vous pouvez utiliser -showcertssi vous souhaitez télécharger tous les certificats de la chaîne. Mais si vous voulez simplement télécharger le certificat de serveur, il n’est pas nécessaire de spécifier-showcerts
echo -n donne une réponse au serveur, pour 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. C'est le format préféré pour importer le certificat dans d'autres magasins de clés.
-showcerts- t - il aussi le certificat serveur / feuille? Je pensais que seuls les intermédiaires étaient affichés lorsque ce commutateur était inclus.
s_clientaffiche toujours le certificat de serveur (s’il en existe un, c’est-à-dire que le serveur répond à Hello et ne choisit pas une suite anonyme). -showcertsaffiche tous les certificats reçus, cert serveur, puis intermédiaires et / ou root.
J'ai trouvé la réponse. Openssl le fournit.
openssl s_client -connect $ {REMHOST}: $ {REMPORT}
openssl x509 -text <<EOF cert-text EOFpour voir les détails du certificat
sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pemcourtoisie de serverfault.com/questions/139728/…
L’ outil client GNUTLSgnutls-cli , peut également 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, de /dev/null) pour mettre fin à la session interactive.
Sur la base de @bignose answer, voici une version autonome qui convient bien, 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
true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509
ce mode de openssl attend stdin, nous le fournissons donc via true |, cela se connecte au serveur spécifié dans le paramètre -connect. 2>/dev/nullélimine les erreurs (facultatif), nous pouvons transmettre la totalité de la sortie à l’analyseur x509, en spécifiant qu’il /dev/stdinfaut utiliser le canal de communication en tant que fichier d’entrée. Et cela ne produira que la partie -----BEGIN CERTIFICATE-----to -----END CERTIFICATE-----de la s_clientsortie. Vous pouvez le rediriger vers un fichier en ajoutant > google.com.pemà la fin de la commande.
Autant que je sache, cela ne vérifie pas la chaîne de certificats, il peut seulement vous indiquer l’identité SSL fournie par le serveur final.
x509lit stdin par défaut, de sorte qu'il -in /dev/stdinest redondant (3) s_clientvérifie que le certificat de serveur est correctement lié à une ancre de confiance locale (racine) et qu'il n'est pas expiré, mais Supprimé les informations qui indiqueraient cela (4) il ne vérifie PAS la révocation (5) il vérifie le nom dans le certificat de serveur uniquement dans la version 1.0.2, puis pas par défaut (mais vous pouvez facilement le vérifier vous-même en consultant le certificat. par la suite)