Date de dernière mise à jour : le 7 juillet 2017 à 16 h 42 min

pure-ftpd, SSL, FTPS et Let’s Encrypt sur Debian 8

On va voir comment activer le ftps sur Pure-ftpd. Déjà, qu’est-ce que le ftps (à ne pas confondre avec le sftp). Tout comme le https est le http utilisant le protocole SSL (ou TLS), le ftps est le ftp utilisant le protocole SSL afin de chiffrer la connexion.

Lancer la commande
sudo echo 1 > /etc/pure-ftpd/conf/TLS

Ca va créer le fichier TLS et lui donner la valeur 1. La valeur 1 permet la connexion en ftps mais autorise la connexion ftp (sans SSL). Si vous mettez la valeur à 2, ça n’autorisera que la connexion en ftps.

On va également configurer la plage de port utilisée en mode passif. Lancer la commande
sudo echo "54000 64000" > /etc/pure-ftpd/conf/PassivePortRange.

La plage de port utilisée pour le transfert de donnée sera donc entre le port 54000 et 64000 (pensez à ouvrir cette plage dans le parefeu du serveur).

Il faut savoir que pure-ftpd cherche le certificat SSL dans le répertoire /etc/ssl/private/pure-ftpd.pem et qu’il n’est pas possible de modifier ça.
Deux choix s’offrent alors à vous :

  • Soit vous récupérez le certificat de Let’s Encrypt pour le renommer et le copiez dans le répertoire /etc/ssl/private
  • Soit vous en créez un juste pour Pure-ftpd.

J’ai choisi la première solution histoire de ne pas avoir à gérer 36 certificats SSL.

Pour générer le certificat SSL, je vous renvoi vers cet article.

Il n’est malheureusement pas possible d’utiliser tel quel le fichier généré par Let’s Encrypt pour Pure-Ftpd car Pure-Ftpd a besoin d’un fichier contenant la clé privé et le certificat. Il va donc falloir concaténer les fichiers privkey.pem (la clé privé) et fullchain.pem (le certificat).
La commande pour concaténer ces deux fichiers en un seul et la suivant :

cat /etc/letsencrypt/live/votredomaine/privkey.pem /etc/letsencrypt/live/votredomaine/fullchain.pem > /etc/ssl/private/pure-ftpd.pem

Cette commande doit être lancé en root. Elle va donc créer le fichier pure-ftpd.pem dans le répertoire /etc/ssl/private. Ce fichier est la fusion des fichiers Let’s Encrypt privkey.pem et fullchain.pem. Pensez à remplacer « votredomaine » par le nom de domaine de votre certificat.
Merci à vm2014 pour cette astuce.

Comme je suis un fainéant et que je n’ai pas envie de devoir lancer cette commande tous les 3 mois (les certificats Let’s Encrypt ont une durée de validité de seulement 3 mois), on va modifier le script de renouvellement du certificat Let’s Encrypt (voir ici pour créer ce script).

Ouvrez le fichier script_letsencrypt.sh. Il devrait ressembler à ça (avec le bon nom de domaine et le bon user) :

#!/bin/sh

#Vérification de l'expiration du certificat SSL de memodugeek.info

if ! openssl x509 -checkend 86400 -in /etc/letsencrypt/live/votredomaine/fullchain.pem; #Si le certificat expire d'ici 24h (86400 secondes)
then
systemctl stop apache2.service
/home/fate/certbot/certbot-auto certonly --config /home/fate/lets_encrypt.ini
systemctl start apache2.service
fi

On va donc rajouter la commande cat et rajouter une ligne pour redémarrer le service pure-ftpd. Ca va donner ceci :


#!/bin/sh

#Vérification de l'expiration du certificat SSL de memodugeek.info...

if ! openssl x509 -checkend 86400 -in /etc/letsencrypt/live/votredomaine/fullchain.pem; #Si le certificat expire d'ici 24h (86400 secondes)
then
systemctl stop apache2.service
/home/fate/certbot/certbot-auto certonly --config /home/fate/lets_encrypt.ini
cat /etc/letsencrypt/live/votredomaine/privkey.pem /etc/letsencrypt/live/votredomaine/fullchain.pem > /etc/ssl/private/pure-ftpd.pem
systemctl restart pure-ftpd-mysql.service
systemctl start apache2.service
fi

Le fichier concaténé sera maintenant créé après chaque renouvellement du certificat Let’s Encrypt.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.