Un beau certificat ssl sur toutes les pages

Depuis quelques jours, on peut naviguer sur ce blog en https, en version TLS 1.2. Au départ, j'avais oublié de créer un certificat pour mon sous-domaine static qui me sert à livrer les fichiers statiques, en particuler les images. Du coup la page n'était pas considérée comme sûre par la plupart des navigateurs car le contenu était mixte : page en https mais certaines ressources en http (sans le s).

Les certificats délivrés par Let's Encrypt ne sont valides que 90 jours. Il faut donc penser à les renouveler. Comme je ne suis pas une machine, je vais forcément oublier et donc j'ai ajouté une tâche automatique pour faire ça automatiquement. Ma tache est lancé tous les jours et je renouvelle le certificat s'il a moins de 30 jours.

J'ai cloné et installé le dépôt d'outils fourni par Let's Encrypt et j'ai mis la configuration de mon certificat dans un fichier .ini qui ressemble à ça :

domains = www.nikrou.net,static.nikrou.net
rsa-key-size = 4096
server = https://acme-v01.api.letsencrypt.org/directory
email = YOUR_MAIL@YOUR.DOMAIN
authenticator = webroot
webroot-path = PATH/TO/DOCUMENTROOT

Je peux alors lancer la mise à jour de mon certificat en faisant simplement :

$ ./letsencrypt-auto -c path/to/cli.ini

Du coup pour que la mise à jour se fasse automatiquement, il suffit de créer une nouvelle entrée dans le répertoire /etc/cron.daily avec le contenu suivant, par exemple :

#!/bin/sh

DAY_LIMIT=30
TIMESTAMP_LIMIT=$(($DAY_LIMIT*86400))

OPENSSL=/usr/bin/openssl
SSL_PEM=PATH_TO_PEM_CERTIFICATE

MAIL=/usr/bin/mail -s "[ssl] Update" YOUR_EMAIL@YOUR.DOMAIN

PATH_LETSENCRYPT=PATH_TO_LETSENCRYPT_INSTALLATION

if $OPENSSL x509 -checkend $TIMESTAMP_LIMIT -noout -in $SSL_PEM
then
    echo "Certificate is valid for more than $DAY_LIMIT days. Do not update." | $MAIL
else
    cd $PATH_LETSENCRYPT  && ./letsencrypt-auto -c /etc/letsencrypt/cli.ini
    if [ $? -ne 0 ];then
	echo "Something goes wrong. Cannot update ssl certificate. Need to validate it manually" | $MAIL
    else
        echo "Certificate has been updated" | $MAIL
    fi
fi


exit 0

Il faut renseigner l'adresse mail, le chemin vers votre certificat (fichier PEM) et le répertoire où letsencrypt est installé. Il ne faut pas oublier de rendre ce fichier exécutable. J'ai créé un dépôt git avec ce script si vous avez des corrections ou des idées d'amélioration.

Haut de page