Pour obtenir les Subject Alternative Names (SAN) d'un certificat, utilisez la commande suivante :
openssl s_client -connect website.com:443 </dev/null 2>/dev/null | openssl x509 -noout -text | grep DNS:
Tout d'abord, cette commande se connecte au site que nous voulons (website.com, port 443 pour SSL) :
openssl s_client -connect website.com:443
Ensuite, le tuyau ( |
) dans cette commande :
openssl x509 -noout -text
Il prend le fichier de certificat et en sort tous les détails juteux. La fonction -noout
l'empêche de produire le fichier de certificat (encodé en base64) lui-même, ce dont nous n'avons pas besoin. L'option -text
lui indique d'afficher les détails du certificat sous forme de texte.
Normalement, il y a beaucoup de données de sortie (signature, émetteur, extensions, etc.) dont nous ne nous soucions pas, alors nous mettons en place un tuyau que en un simple grep :
grep DNS:
Étant donné que les entrées du SAN commencent par DNS:
ne renvoie que les lignes qui contiennent cette information, en éliminant toutes les autres informations et en nous laissant l'information souhaitée.
Vous remarquerez que la commande ne se termine pas proprement ; openssl s_client
agit en fait comme un client et laisse la connexion ouverte, en attente d'une entrée. Si vous voulez qu'il quitte immédiatement (par exemple pour analyser la sortie dans un shell script), pipez simplement echo
en son sein :
echo | openssl s_client -connect website.com:443 | openssl x509 -noout -text | grep DNS:
Comment obtenir le SAN directement à partir d'un fichier ?
Pour cela, vous n'avez pas besoin de l'option openssl s_client
commande. Il suffit d'ajouter -in MyCertificate.crt
sur le openssl x509
et une fois de plus, passer par grep, par exemple :
openssl x509 -noout -text -in MyCertificate.crt | grep DNS: