Retour au Sommaire
Prendre en charge FTPS (SSL) sur PureFTPd
Depuis quelque temps, les clients FTP commencent à s'émouvoir de ce qu'on ne gère pas les connexions FTP sécurisées sur un serveur, voyons donc comment ajouter une couche SSL à PureFTPd, dont on a vu l'installation dans un précédent article.
CHAPTER:Certificat auto-signé:CHAPTER
Dans ce premier cas, on ne dispose pas d'un vrai certificat, validé par une autirité de certification, et on veut se contenter d'un certificat auto-signé.
On va le générer sous /etc/ssl/private/pure-ftpd.pem, donc on vérifie d'abord que le répertoire existe bien:
CMD:
mkdir -p /etc/ssl/private/
:CMD
Puis on génère le certificat, le fichier cible va contenir la clé privée puis le certificat:
CMD:
openssl req -x509 -nodes -newkey rsa:2048 -sha256 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem
:CMD
On obtient dans le pem un contenu de ce type:
CODE:
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDb/ZzOHJ82I3ZN
OHdCCerct9nFtOd2YYv7jMW7r2kE1CAkcxdmdDcD1Na5saadViHHs9UXl7jqOP07
TnOgwZc/H2I8P2OTy8q0flJiQFzKq+kaObHHhtO/Nmu/aN5wchgESbG+mwSyN+HP
....
eSqfUIS/XQuiPKsprk0P+nbYSrQMrcJy6f7qfP/8/MNT7i96dW/cYFw4N/ByLGY7
Q28gzmVdLucHo3aK8oqQaBXVA5+cCKnHU9bQrqoGVl4co0hcpZPtZOcx9DV1+0r2
9+NZHnXcQjTFOHZr/ifD6g==
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIID+TCCAuGgAwIBAgIUMEf1HvJs9+EXAQexFYsfKjcDnaIwDQYJKoZIhvcNAQEL
BQAwgYsxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIDAZGcmFuY2UxDjAMBgNVBAcMBVBh
cmlzMRAwDgYDVQQKDAdIZXJvaWtzMQswCQYDVQQLDAJJVDEaMBgGA1UEAwwRdnBz
....
x8sc+TtiRXprNLEXmKHsVDtezIo7GcbIte1y96y5LDqJn69aC1avy7e1+fx0R4zx
D1V6UXvbACTMIM9vExLEI+BN/NOjAHAqUoXH+bh7+Y9FKTJLXKctysgxP9xWZe1c
b6uPhLeUVWiD7gDLcA==
-----END CERTIFICATE-----
:CODE
On ajuste les droits du fichier:
CMD:
chmod 600 /etc/ssl/private/pure-ftpd.pem
:CMD
Puis on configure FTPd de manière à ce qu'il accepte aussi bien les connexions SSL que non cryptées:
CMD:
echo 1 > /etc/pure-ftpd/conf/TLS
:CMD
Pour que cette nouvelle configuration soit prise en compte, on redémarre FTPd:
CMD:
/etc/init.d/pure-ftpd-mysql restart
:CMD
C'est fini !
CHAPTER:Un vrai certificat:CHAPTER
Puisque l'on a déjà notre clé privée, le certificat et les autorités de certification, il suffit de concaténer dans /etc/ssl/private/pure-ftpd.pem:
Clé privée
+
Certificat
+
CAs
Puis comme dans le cas précédent:
CMD:
chmod 600 /etc/ssl/private/pure-ftpd.pem
echo 1 > /etc/pure-ftpd/conf/TLS
/etc/init.d/pure-ftpd-mysql restart
:CMD
Et voilà !
CHAPTER:Et avec LetsEncrypt ?:CHAPTER
On suppose ici que vous utilisez certbot pour Apache, que vous avez un domaine pour lequel vous avez configuré LetsEncrypt, donc le certificat existe, se renouvelle automatiquement etc.
Pour utiliser ce certificat Apache pour PureFTPd, il va falloir concaténer la clé privée puis la fullchain LetsEncrypt dans le fichier "/etc/ssl/private/pure-ftpd.pem" avec les autorisations à 600. Pour le reste, ce sera comme dans les sections précédentes:
CMD:
echo 1 > /etc/pure-ftpd/conf/TLS
/etc/init.d/pure-ftpd-mysql restart
:CMD
En pratique, listez d'abord vos certificats installés:
CMD:
certbot certificates
:CMD
Vous obtenez pour chaque certificat un descriptif du style:
CODE:
Certificate Name: riffzone.net
Domains: riffzone.net
Expiry Date: 2020-04-08 00:04:21+00:00 (VALID: 49 days)
Certificate Path: /etc/letsencrypt/live/riffzone.net/fullchain.pem
Private Key Path: /etc/letsencrypt/live/riffzone.net/privkey.pem
:CODE
Dans le crontab, après le "certbot renew", on n'a plus qu'à lancer le script suivant, en utilisant bien sûr vos propres chemins de pem LetsEncrypt:
CODE:
cat /etc/letsencrypt/live/riffzone.net/privkey.pem > /etc/ssl/private/pure-ftpd.pem
cat /etc/letsencrypt/live/riffzone.net/fullchain.pem >> /etc/ssl/private/pure-ftpd.pem
chmod 600 /etc/ssl/private/pure-ftpd.pem
/etc/init.d/pure-ftpd-mysql restart
:CODE