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.
Certificat auto-signé
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:
mkdir -p /etc/ssl/private/
Puis on génère le certificat, le fichier cible va contenir la clé privée puis le certificat:
openssl req -x509 -nodes -newkey rsa:2048 -sha256 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem
On obtient dans le pem un contenu de ce type:
-----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-----
On ajuste les droits du fichier:
chmod 600 /etc/ssl/private/pure-ftpd.pem
Puis on configure FTPd de manière à ce qu'il accepte aussi bien les connexions SSL que non cryptées:
echo 1 > /etc/pure-ftpd/conf/TLS
Pour que cette nouvelle configuration soit prise en compte, on redémarre FTPd:
/etc/init.d/pure-ftpd-mysql restart
C'est fini !
Un vrai certificat
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:
chmod 600 /etc/ssl/private/pure-ftpd.pem echo 1 > /etc/pure-ftpd/conf/TLS /etc/init.d/pure-ftpd-mysql restart
Et voilà !
Et avec LetsEncrypt ?
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:
echo 1 > /etc/pure-ftpd/conf/TLS /etc/init.d/pure-ftpd-mysql restart
En pratique, listez d'abord vos certificats installés:
certbot certificates
Vous obtenez pour chaque certificat un descriptif du style:
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
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:
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