Comme vous le savez aujourd’hui des acteurs du web tel que google directement via son moteur de recherche et son navigateur, ainsi que modzilla Firefox, déprécient de plus en plus le protocole HTTP pour faire passer le web petit à petit au HTTPS. Je vous invite d'ailleurs à lire cet article qui sera plus détaillé que le miens sur le sujet. Ici je ne vais traiter que d'une solution technique.
La solution gratuite : Let’s encrypt
Let ‘s encrypt est une solution rapide et surtout gratuite pour ajouter un certificat à son site. Il est d’ailleurs proposer par OVH gratuitement sur ses hébergements mutualisés.
Let’s encrypt n’est pas sans contrainte, il est en effet nécessaire de mettre à jour son certificat tous les trois mois. C’est en effet un des moyens pour vérifier votre propriété du nom de domaine.
Mise en oeuvre
Voilà pour le topo, je vais maintenant vous montrer comment installer rapidement let’s encrypt sur un serveur dédié avec Virtualmin. J’ai créé un petit script qui permet de générer automatiquement le certificat, et de créer le cron qui va automatiquement renouveler le certificat (tous les trois mois)
Testé sur un debian 8 et 7 et virtualmin XXX, mais devrait fonctionner aussi bien sur ubuntu
Avant tout ça il faut installer let’s encrypt sur le serveur. Connectez-vous en SSH à votre serveur avec les privilèges root.
On se positionne dans le dossier root, et on va récupérer le dépôt GIT de let’s encrypt. (Si git n'est pas installé sur votre système => git apt-get install git)
cd /root/ && git clone https://github.com/letsencrypt/letsencrypt
Maintenant que let’s encrypt est installé, on va s'occuper de la suite en copiant le script sur le serveur.
Créer le fichier ./BASH/encrypt.sh en faisant :
mkdir ./BASH nano ./BASH/encrypt.sh
Copiez/collez le contenu suivant : (J’ai essayer de commenter au maximum pour que cela reste compréhensible).
#!/bin/bash ## Nom de domaine domain.tld MYDOMAIN=$1 ## Nom d'utilisateur Virtualmin pour ce domain MYUSERNAMEFORDOMAIN=$2 ## Commande qui sera exécutée dans le cron CMD="cd /root/letsencrypt/ && ./letsencrypt-auto certonly --email info@$MYDOMAIN --agree-tos --webroot --renew-by-default -w /home/$MYUSERNAMEFORDOMAIN/public_html/ -d www.$MYDOMAIN -d $MYDOMAIN --authenti$ ## Le cron sera executé tous les 1er du mois à 3h01 CRON="01 3 1 * * $CMD" ## Création du dossiers où seront enregistrés les certificats mkdir /home/$MYUSERNAMEFORDOMAIN/ssl_certificates #Création du cron crontab -l > /root/mycron echo "$CRON" >> /root/mycron crontab /root/mycron rm /root/mycron ##Gen des certifs cd /root/letsencrypt/ && ./letsencrypt-auto certonly --email info@$MYDOMAIN --agree-tos --webroot --renew-by-default -w /home/$MYUSERNAMEFORDOMAIN/public_html/ -d www.$MYDOMAIN -d $MYDOMAIN --authenticator$
Enregistrer avec CTRL + X
On va maintenant rendre le fichier exécutable
chmod +x ./BASH/encrypt.sh
Ajouter un alias en faisant
nano ./.bashrc
et en ajoutant la ligne à la fin de votre fichier
alias encrypt='~/BASH/encrypt.sh'
On active l’alias avec le commande suivante
source ./bashrc
Maintenant pour ajouter un certificat il suffira de taper la commande suivante :
encrypt domain.tld domain_login_virtualmin
Maintenant que l’on peut ajouter un certificat il faut le lier à son site sur virtualmin.
Pour que ce soit le plus clair possible je vais vous montrer la procédure complète avec un nom de domaine bidon sur virtualmin.
Une fois mon domaine créé, je vais activer le SSL, si jamais je ne l’ai pas fais à la création.
Pour ce faire il faut se rendre sur :
Virtualmin / Choisir votre domain / Edit virtual server / Enabled features / SSL website Enabled.
On en profite pour note le nom d’utilisateur, car c’est l’une des variables que l’on va communiquer au script avec le nom de domaine. Dans mon cas encryptest.
Lancez la commande, à la fin si tout s’est bien passé vous devez avoir un message du type « congratulations ».
/!\ Attention : Pour ne pas avoir d’erreur les DNS de votre domaine doivent pointer vers votre serveur, je le dis au cas où vous pensiez l’installer en amont dans le cadre d’une préproduction, ou d’une migration.
Reste maintenant à configurer le certificat pour le domaine.
Rendez vous sur Server configuration / manage SSL certificate / onglet « Update certificate and key »
Pour la partie signed SSL certificate, choisissez « file on server », parcourez les fichiers et partez chercher le fichier dans le dossier de votre user. Dans mon cas :
/home/encryptest/ssl_certificates/cert.pem
De la même façon on va chercher la clef privée.
/home/encryptest/ssl_certificates/privkey.pem
On clique ensuite sur install now
On retourne ensuite au manager des certificat et l’on clique sur l’onglet CA certificate
là encore on choisi files on server : et on va choisir le fichier fullchain.pem
/home/encryptest/ssl_certificates/fullchain.pem
Pour terminer on va vérifier que le script a bien créé le cron, qui va régénérer les certificats tous les mois.
Vous n’avez plus qu’a valider et à ce moment là votre site est en https.
Vous pouvez le vérifier en vous rendant sur l'url https://www.domain.tld 🙂