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 -showcerts
si 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_client
affiche 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). -showcerts
affiche 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 EOF
pour 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.pem
courtoisie 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/stdin
faut 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_client
sortie. 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.
x509
lit stdin par défaut, de sorte qu'il -in /dev/stdin
est redondant (3) s_client
vé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)