Enregistrer le certificat SSL distant via la ligne de commande Linux

28

Pouvez-vous penser à une méthode de ligne de commande Linux pour enregistrer le certificat présenté par un serveur HTTPS? Quelque chose dans le sens où curl / wget / openssl établit une connexion SSL et enregistre le certificat plutôt que le contenu de la réponse HTTP.

L'équivalent gui à ce que je recherche serait de naviguer sur le site HTTPS, de double-cliquer sur l'icône "site sécurisé" du navigateur et d'exporter le certificat. Sauf que le but ici est de le faire de manière non interactive.

Merci, Jim


la source

Réponses:

40

Quelque chose comme:

openssl s_client -servername remote.server.net -connect remote.server.net:443 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >/path/to/certificate.pem

C'est ce que j'utilise avec fetchmail pour récupérer le certificat d'un serveur IMAP ou POP3 compatible SSL (sauf évidemment je n'utilise pas le port 443)

(Notez que le -servernameparamètre "redondant" est nécessaire pour faire opensslune requête avec le support SNI.)

Cry Havok
la source
1
Une façon d'obtenir la chaîne complète?
Collin Anderson
9

Sur http://www.madboa.com/geek/openssl/#cert-retrieve

#!/bin/sh
#
# usage: retrieve-cert.sh remote.host.name [port]
#
REMHOST=$1
REMPORT=${2:-443}

echo |\
openssl s_client -connect ${REMHOST}:${REMPORT} 2>&1 |\
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
Matt Simmons
la source