Introduction
Il y a en général besoin de 3 fichiers différents avec SSL : une clé privée pour le serveur (key ou pem), un certificat (cer ou crt) distribué au client pour le chiffrement SSL, et la chaine de confiance (chain ou txt) qui consiste en une suite de certificats tous signés les uns par les autres, et qui permet ensuite de remonter à un certificat racine installé sur votre ordinateur.
Le script que je vous propose permet de vérifier si un certificat serveur SSL est valide, c’est à dire :
- de vérifier que la clé privée correspond bien au certificat ;
- de vérifier que la chaine de confiance est valide.
Fonctionnement du script
Pour vérifier votre domain example.com, il vous faudra les 3 fichiers mentionnés plus haut, c’est à dire :
example.com.key
: la clé privéeexample.com.cer
: le certificatexample.com.chain.txt
: la chaine de confiance
Le script va vérifier que la clé et le certificat ont la même signature (avec l’argument -modulus
de openssl), et vérifier le certificat avec la commande openssl verify.
Le script
- #!/bin/sh
- DOMAIN="$1"
- [ -z "$DOMAIN" ];
- "Usage : "$( "$0")" domain" >&2
- " Will check if \$domain.key, \$domain.cer and \$domain.chain.txt are correct" >&2
- 1
- # Check key and certificate modulus
- KEY_MOD=$(openssl rsa -noout -modulus - ${DOMAIN}.key | openssl md5)
- CER_MOD=$(openssl x509 -noout -modulus - ${DOMAIN}.cer | openssl md5)
- [ "${KEY_MOD}" != "${CER_MOD}" ];
- "Error : key does not match certificate" >&2
- 2
- # Check certificate consistency
- openssl verify -CApath /etc/ssl/certs -CAfile ${DOMAIN}.chain.txt ${DOMAIN}.cer | -q "^${DOMAIN}.cer: OK$"
- [ $? -ne 0 ];
- openssl verify -CApath /etc/ssl/certs -CAfile ${DOMAIN}.chain.txt ${DOMAIN}.cer >&2
- "Error while verifying certificate chain" >&2
- 3
- "Success"
- 0