J'ai un certificat permet de chiffrer HTTPS installé pour un site qui se renouvelle automatiquement.
Mon souci est que le renouvellement automatique puisse échouer et que les visiteurs puissent être accueillis avec un avertissement de certificat expiré.
Quel est le meilleur moyen de vérifier automatiquement que le certificat a été renouvelé? Je pensais à une sorte de script cron côté serveur à partir d'un serveur de test, mais cela semble un peu exagéré pour un problème que la plupart des sites HTTPS ont probablement rencontré, alors je me suis demandé s'il y avait une approche plus simple.
J'utilise ssl-cert-check que j'installe via Apt sous Ubuntu:
Sudo apt install ssl-cert-check
Je le lance ensuite dans un travail quotidien tel que:
ssl-cert-check -f /etc/ssl-check-sites.txt | /opt/bin/ssl-check-alert.pl
Où le fichier texte répertorie mes domaines comme:
example.com 443
example.net 443
Si vous exécutez ssl-cert-check
, le résultat obtenu sera toujours le suivant:
Host Status Expires Days
----------------------------------------------- ------------ ------------ ----
example.com:443 Valid Oct 3 2018 35
example.net:443 Valid Oct 3 2018 35
Le fichier Perl filtre la sortie de sorte que cron ne m'envoie un courrier électronique que si un certificat expire dans moins de 25 jours:
#!/usr/bin/Perl
use strict;
my $full = "";
my $error = 0;
foreach my $line (<STDIN>) {
$full.=$line;
chomp $line;
if ($line =~ /^[ \t]*$/){
} elsif ($line =~ /^Host/){
} elsif ($line =~ /^-------/){
} elsif ($line =~ /^\s*([a-z\.]+).*\s([\-0-9]+)\s*$/){
my ($Host, $days) = ($1, $2);
$days = 0 + $days;
if ($days < 25){
print "$Host SSL is expiring in $days days and should be renewed\n";
$error = 1;
}
} else {
print "Can't parse: $line\n";
$error = 1;
}
}
if ($error){
print "\n\n\n$full";
exit 1;
}
J'ai choisi 25 jours car les certificats LetsEncrypt sont généralement renouvelés à 30 jours. Cela leur donne quelques tentatives de renouvellement avant que je ne commence à recevoir des alertes. 25 jours sont encore suffisants pour résoudre les problèmes manuellement.