Mot-clé - openssl

Fil des billets

jeudi 4 février 2016

OpenSSL : détecter la péremption d'un certificat avec l'option -checkend

Dans un précédent article (ici), je proposais une méthode pour renouveler les certificats Letsencrypt en l'absence d'un mécanisme officiel pour le moment. Dans cette méthode (enfin ce script), je vérifiais la date du certificat avec "date -r", extrapolant la date de fin de validité à l'aide de la date de création du certificat et de la connaissance de la durée de validité par défaut des certificats de Letsencrypt.

Il y a en fait beaucoup plus intelligent ! Merci à mon beau-frère pour cette idée (toujours écouter au moins d'une oreille son beau-frère !)

Le manuel d'OpenSSL nous apprend l'existence de l'option suivante :

-checkend arg
checks if the certificate expires within the next arg seconds and exits non-zero if yes it will expire or zero if not.

Dès lors, il est facile de détecter si un certificat périme dans les 30 jours (2 592 000 secondes) :

if openssl x509 -checkend 2592000 -noout -in file.pem
then
  echo "Certificat valide encore au moins 30 jours"
else
  echo "Certificat périmant dans les 30 jours... à renouveler !"
fi

jeudi 27 mars 2014

Ordonner à Rails d'accepter un certificat auto-signé

Par défaut, l'implémentation OpenSSL dans Rails interdit (et c'est tout à fait normal !) les certificats dont l'identité ne peut être vérifiée. C'est ennuyeux si vous utilisez (par exemple pour des tests ou en développement) des certificats auto-signés car alors impossible de récupérer les données convoitées par exemple sur votre serveur HTTPS ou bien sur votre IMAPS.

Voilà l'erreur que OpenSSL doit retourner dans ce cas :

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

Pour contourner ce problème, on pourra inclure le code suivant dans son application :

require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

Pour une application supportée par Rails, on pourra par exemple inclure ceci dans les "initializers", par ex. dans /config/initializers/bypass_ssl_identity_check.rb.