Dans son utilisation classique le protocole FTP n’est pas sécurisé car il n’est pas chiffré, les données et même le mot de passe de session circulent en clair. Ce rapide tutoriel va servir de guide pour mettre en place un chiffrement TLS avec le serveur FTP proFTPd sur une machine sous CentOS 7.
Création du certificat SSL pour TLS
Avec CentOS, nous allons créer le certificat sous /etc/pki/tls/certs/
. Il suffit de répondre aux questions, la plus importante étant le Common name qui doit reflêter le hostname du serveur FTP :
$ cd /etc/pki/tls/certs/ $ sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout proftpd.pem -out proftpd.pem -days 365 Generating a 2048 bit RSA private key ..................................+++ .........+++ writing new private key to 'proftpd.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:FR State or Province Name (full name) []:Vosges Locality Name (eg, city) [Default City]:Corcieux Organization Name (eg, company) [Default Company Ltd]:Nom compagnie Organizational Unit Name (eg, section) []:Nom section Common Name (eg, your name or your server's hostname) []:feub.net Email Address []:f@feub.net $ sudo chmod 600 proftpd.pem
Le certificat étant créé, il faut l’ajouter à la configuration de proFTPd pour que celui-ci le prenne en compte.
$ sudo vim /etc/proftpd.conf
Décommenter ou ajouter les ignes ci-dessous :
PassivePorts 6000 6100 TLSEngine on TLSRequired on TLSProtocol SSLv23 TLSRSACertificateFile /etc/pki/tls/certs/proftpd.pem TLSRSACertificateKeyFile /etc/pki/tls/certs/proftpd.pem TLSCipherSuite ALL:!ADH:!DES TLSOptions NoCertRequest TLSVerifyClient off TLSLog /var/log/proftpd/tls.log
Il n’ a plus qu’à redémarrer proFTPd :
$ sudo systemctl restart proftpd
Firewalld
Avant d’aller plus loin et de tester la connexion, il faut que le firewall accepte les connexions, pour firewalld, nous allons ouvrir les ports 6000 à 6100.
$ sudo firewall-cmd --add-port=6000-6100/tcp $ sudo firewall-cmd --add-port=6000-6100/tcp --permanent
Test de la connexion chiffrée
Il est temps de tester la connexion chiffrée avec TLS. On peut faire un rapide test directement avec la commande OpenSSL :
$ openssl s_client -connect 127.0.0.1:21 -starttls ftp
CONNECTED(00000003)
depth=0 C = FR, ST = Vosges, L = Corcieux, O = Nom compagnie, OU = Nom section, CN = feub.net, emailAddress = f@feub.net
verify error:num=18:self signed certificate
verify return:1
depth=0 C = FR, ST = Vosges, L = Corcieux, O = Nom compagnie, OU = Nom section, CN = feub.net, emailAddress = f@feub.net
verify return:1
---
Certificate chain
0 s:/C=FR/ST=Vosges/L=Corcieux/O=Nom compagnie/OU=Nom section/CN=feub.net/emailAddress=f@feub.net
i:/C=FR/ST=Vosges/L=Corcieux/O=Nom compagnie/OU=Nom section/CN=feub.net/emailAddress=f@feub.net
---
Server certificate
-----BEGIN CERTIFICATE-----
MIID5TCCAs2gAwIBAgIJAOHJ/v8EqQsMMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYD
VQQGEwJGUjEPMA0GA1UECAwGVm9zZ2VzMREwDwYDVQQHDAhDb3JjaWV1eDERMA8G
A1UECgwIZmV1Yi5uZXQxETAPBgNBBAsMCGZldWIubmV0MRQwEgYDVQQDDAtyaG9s
YWxhLm5ldDEZMBcGCSqGSIb3DQEJARYKZkBmZXViLm5ldDAeFw0xNjA2MDMxMTMy
MDNaFw0xNzA2MDMxMTMyMDNaMIGIMQswCQYDVQQGEwJGUjEPMA0GA1UECAwGVm9z
Z2VzMREwDwYDVQQHDAhDb3JjaWV1fDERMA8GA1UECgwIZmV1Yi5uZXQxETAPBgNV
BAsMCGZldWIubmV0MRQwEgYDVQQDDAtyaG9sYWxhLm5ldDEZMBcGCSqGSIb3DQEJ
ARYKZkBmZXViLm5ldDCCASIwDQYJKo4IhvcNAQEBBQADggEPADCCAQoCggEBAOUt
4PeAbcLALCLNeJ81BU/86uE0CFD+imc3b8ortE2/pL3ZoOz/nytLB4bKQEyLv9TN
NOgFd5WTCTf9A5CiPnmNpA+M3UxJ2W/eg7/Mka96I8B2uKikiCMd/tvxF+v5C3MV
9qMs7a9Y/s9FJuH+J5FuOq9vAs2G8KrIh1hp5LrxLoTYqJ9nHcW9yRn08mqhHSVI
TInBIcHRBZ3xgdtFOsDKLHkcNb6aIYwqIhwUc2fNlq3F/ms0NuSyO0wqr/1xfduE
5bfq9LcjssLtMEE6hTdsFYnODdtGbFarrsxZZPC5H3tjA+OY4h8xXlA4VR13VjrZ
e+DetkFVArTTlN1aTMkCAwEAAaNQME4wHQYDVR0OBBYEFJqVQi+IqvA+bNJ8AA8v
fboYM9oKMB8GA1UdIwQYMBaAFJqVQi+IqvA+bVosgesxfboYM9oKMAwGA1UdEwQF
MAMBAf8wDQYJKoZIhvcNAQELBQADggEBAC9Bjz02kNBUI3T03MfxuUoe0/sfOIf4
PUEzIzc1Qbnf/50OiFafaHXXYmVRmvbTp700Ct1dzoEQE4hUw/VMGUR3Ia+I/nRD
A6TXNgZWNdRNdr2Ji/Dx+iGZNtiamot6qbLYuBXWUs9lnjLxNmHCHrMy+anTxCBG
iGGy8JonFjXtXy6+Ru6HL1MF/bAvdjXQj/pcfiTbm+QOWATNaP1FKwDokYtYn64y
+y8XaJowTTFQ9SaqHjrJlK78isg5LMIa/x+E4KgpedrogbWXiGcurltookcWX/kU
J6HashitakarZJRYmtqDgp3zCCJpXu9AeeyEe6zngNRkS5yFSXw5FhF3FA=
-----END CERTIFICATE-----
subject=/C=FR/ST=Vosges/L=Corcieux/O=Nom compagnie/OU=Nom section/CN=feub.net/emailAddress=f@feub.net
issuer=/C=FR/ST=Vosges/L=Corcieux/O=Nom compagnie/OU=Nom section/CN=feub.net/emailAddress=f@feub.net
---
No client certificate CA names sent
Server Temp Key: ECDH, prime256v1, 256 bits
---
SSL handshake has read 1567 bytes and written 391 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : ECDHE-RSA-AES256-SHA
Session-ID: 6076A52E51A1723E54897C2F8B07AFF0AD1135DAE2
Session-ID-ctx:
Master-Key: 68A81A1CFEABD619EBD6F58F86A201B00CAB4
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
Start Time: 1464953971
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
220 FTP Server ready.
Tout semble fonctionner. Il suffit maintenant de configurer votre client FTP pour qu’il utilise TLS, avec FileZilla choisir Connexion FTP explicite sur TLS :

Lors de la connexion une fenêtre demandant d’accepter le nouveau certificat attend votre confirmation.

La connexion se poursuit :
Statut : Connexion établie, attente du message d'accueil... Statut : Initialisation de TLS... Statut : Vérification du certificat... Statut : Connexion TLS établie. Statut : Connecté Statut : Récupération du contenu du dossier "/var/www/html"... Statut : Contenu du dossier "/" affiché avec succès
Mission accomplie, nous sommes connectés en FTP en utilisant une couche de chiffrement TLS.