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ée
  • example.com.cer : le certificat
  • example.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

  1. #!/bin/sh
  2.  
  3. DOMAIN="$1"
  4.  
  5. [ -z "$DOMAIN" ];
  6.   "Usage : "$( "$0")" domain" >&2
  7.   "  Will check if \$domain.key, \$domain.cer and \$domain.chain.txt are correct" >&2
  8.   1
  9.  
  10. # Check key and certificate modulus
  11. KEY_MOD=$(openssl rsa  -noout -modulus - ${DOMAIN}.key | openssl md5)
  12. CER_MOD=$(openssl x509 -noout -modulus - ${DOMAIN}.cer | openssl md5)
  13.  
  14. [ "${KEY_MOD}" != "${CER_MOD}" ];
  15.   "Error : key does not match certificate" >&2
  16.   2
  17.  
  18. # Check certificate consistency
  19. openssl verify -CApath /etc/ssl/certs -CAfile ${DOMAIN}.chain.txt ${DOMAIN}.cer | -q "^${DOMAIN}.cer: OK$"
  20. [ $? -ne 0 ];
  21.   openssl verify -CApath /etc/ssl/certs -CAfile ${DOMAIN}.chain.txt ${DOMAIN}.cer >&2
  22.   "Error while verifying certificate chain" >&2
  23.   3
  24.  
  25. "Success"
  26. 0
  27.  

Télécharger le script