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?
la source
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?
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.
la source
openssl x509 -text <<EOF cert-text EOF
pour voir les détails du certificatsudo 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/…sed
hack.L’ outil client GNUTLS
gnutls-cli
, peut également vous faciliter la tâche: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.la source
Sur la base de @bignose answer, voici une version autonome qui convient bien, par exemple, à une recette de chef:
la source
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 las_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.
la source
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)Syntaxe alternative utilisant Ex et substitution de processus:
la source