Un coin perdu... : Articles - 3 - How to : FTP over SSL
Nous sommes le
Bonne Fête!
Votre connection

Browser : Autre

IP : 38.107.191.103
OS : Système d'exploitation inconnu

Flux

TAG
This will be shown to users with no Flash or Javascript.
Rss 3 - How to : FTP over SSL
Nous venons de voir comment mettre en oeuvre de façon sécurisé un serveur ftp avec vsftpd/pam/xinetd, nous allons voir maintenant, afin de nous sécuriser un peu plus, comment crypter ces échanges ftp avec OpenSSL.

OpenSSL c'est quoi ? Et bien c'est une boite à outils comme dit sur le Wikipédia, des bibliothèques ainsi que des commandes en ligne, et avec ces outils, nous allons pouvoir crypter nos échanges, c'est le même principe que lorsque vous achetez un produit quelconque sur le web, généralement, au moment de banquer vous devez signer un certificat de sécurité un peu obscur, puis vous passez en mode "sécurisé" (https), a partir de la, les données qui transitent entre vous et le "site" (numéro de carte bancaire, coordonnées etc...) sont cryptées. C'est le résultat d'Openssl couplé au serveur Apache, nous, nous allons le coupler à Vsftpd, le principe restera le même mise à part que ce sera le protocole ftp qui sera crypté (ftps)et non http.

Ah oui, cette histoire de certificat...En quoi cela ajoute t'il une sécurité ?? Normalement, on se créer un certificat avec nos coordonnées, mail, le domaine du site..., puis on le soumet à un organisme de vérification qui certifiera de notre identité en signant notre certif, comme ça, le client qui va voir notre beau certificat constatera que machin l'a vérifié et il pourra donc le signer et ainsi avoir une confiance aveugle, ou presque.

c'est super mais ça coute beaucoup de sous de faire signer son certificat par les gens qui vont bien... Alors comme c'est la crise, on va s'auto-certifier nos certificat, on va les signer nous même !

Commençons !

Nous repartons sur la configuration du premier article, donc notre serveur ftp est déjà fonctionnel, il ne reste plus qu'à installer OpenSSL, générer les certificats, avertir vsftpd du changement et enfin, configurer le client ftp pour qu'il soit sur le protocole ftps pour pouvoir se connecter.
Code BASH :
apt-get install openssl

Sera nécessaire mais il est très probable qu'il soit déjà installé. Le fait qu'il soit installé ne veut pas dire qu'il ne reste qu'a ajouter deux ou trois choses. On va commencer par créer un répertoire qui contiendra deux sous répertoires, un pour la base de données des certificats que nous signerons (privé), un autre pour les demande et ceux que l'on générera (newcerts).
Code BASH :
mkdir /etc/CA     # CA pour Certificat d'Autorité.
cd CA
mkdir privé newcerts

Jusque là rien de transcendant, créons la base de données qui accueillera les futurs certificats que nous signerons :
Code BASH :
echo '01' > serial
touch index.txt

Maintenant, nous allons créer un fichier de configuration spécifique que nous agrémenterons au fur et à mesure du courant. Pour le moment, on y met que ça :
Code BASH :
nano /etc/CA/openssl.cnf
 
# OpenSSL configuration file. 
# 
 
# Establish working directory. 
dir = . 
 
 
[Req] 
 default_bits = 1024 # Taille des touches 
 key.pem default_keyfile = # nom de clés générées 
 default_md = md5 message # algorithme de 
 string_mask = # nombstr permis caractères 
 distinguished_name = req_distinguished_name 
 
 ] Req_distinguished_name [ 
 # Nom de la variable de chaîne rapide 
 #---------------------- --------------------------- ------- 
 0.organizationName = Nom organisation (entreprise) 
 organizationalUnitName = Unité organisation Nom (département, division) 
 emailAddress = Adresse Email 
 emailAddress_max = 40 
 Nom Localité localityName = (ville, district) 
 stateOrProvinceName = nom état ou la province (nom complet) 
 Nom Pays countryName = (2 letter code) 
 countryName_min = 2 
 countryName_max = 2 
 commonName = Nom commun (nom hôte, IP, ou votre nom) 
 commonName_max = 64 
 
 # Les valeurs par défaut pour ce qui précède, par souci de cohérence et moins de frappe. 
 # Nom de la variable Valeur 
 #------------------------------ ------------------- ----------- 
 0.organizationName_default = La Société échantillon 
 localityName_default = Metropolis 
 stateOrProvinceName_default = New York 
 countryName_default = US 
 
 [V3_ca] 
 basicConstraints = CA: TRUE 
 subjectKeyIdentifier = hash 
 authorityKeyIdentifier = keyid: toujours, l'émetteur: toujours 

Voila tout ce qu'il faut préciser pour commencer, ce fichier est modulaire, différentes sections peuvent le composer, et certaine section peuvent avoir besoin d'autres sections... Chaque section commence par un nom entre crochets, ici cest : REQ.
Dans ce fichier, il n'a que la section concernant les coordonnées propre a la demande d'un certificat qui soit là mais nous pouvons des maintenant créer notre certificat racine et se l'auto-signer avec cette commande :
Code BASH :
openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem -out cacert.pem -days 650 -config ./openssl.cnf

Je vous invite a lire la page de man d'OpenSSL pour plus d'infos, ici, on passe une requête pour avoir un nouveau certificat signable, il devrait placer la certificat d'autorité dans le répertoire courant (/etc/CA si on est déjà dedans), celui ci sera valable 650 jours, et la clé privée qui va avec dans private, et il devra faire tout ça en fonction de la configuration présente dans son fichier de conf.

Dors et déjà, avec notre nouveau certificat d'autorité racine (cacert.pem), nous pouvons créer n'importe quel nombre de "sous" certificats pour différentes applications (https, fpts, simap...). Il faut maintenant créer l'invitation à signer notre certificat, on va rajouter des paramètres au fichier de conf :
Code BASH :
 req_extensions = v3_req

A placer en dessous de la ligne
distinguished_name = req_distinguished_name
Ensuite, à la fin du fichier rajouter ceci :
Code BASH :
 [V3_req] 
 basicConstraints = CA: FALSE 
 subjectKeyIdentifier = hash

créons cet invitation :
Code BASH :
openssl req -new -nodes -out req.pem -config ./openssl.cnf

Ce processus crée deux fichiers, une clé privé key.pem et l'invitation à signer qui va avec req.pem, qu'il serait préférable de renommer si on utilise SSL sur plusieurs services.

On a notre certificat d'autorité racine, on a notre invitation a signer, certifions nous en nous signant alors ! Une derniere fois, on édite le fichier de conf pour lui rajouter les choses qui vont bien, a savoir la ou il trouvera la base de données, ou est la clé privée... Ajoutons ces quelques ligne avant la section req :
Code BASH :
[ ca ] 
default_ca = CA_default 
 
[ CA_default ] 
serial = $dir/serial 
database = $dir/index.txt 
new_certs_dir = $dir/newcerts 
certificate = $dir/cacert.pem 
private_key = $dir/private/cakey.pem 
default_days = 365 
default_md = md5 
preserve = no 
email_in_dn = no 
nameopt = default_ca 
certopt = default_ca 
policy = policy_match 
 
[ policy_match ] 
countryName = match 
stateOrProvinceName = match 
organizationName = match 
organizationalUnitName = optional 
commonName = supplied 
emailAddress = optional 

Maintenant signons le !!!
Code BASH :
openssl ca -out cert.pem -config ./openssl.cnf -infiles req.pem

Nous venons de créer deux nouveau fichiers, notre certificat signé (enfin) et une copie de celui ci dans newcerts. Ce certificat comporte deux version, une codée, une humainement compréhensible, enlevons cette dernière pour plus de sécurité :
Code BASH :
mv cert.pem tmp.pem 
openssl x509 -in tmp.pem -out cert.pem 

L'installation du certificat et de sa clé dépend de l'application de destination, pour vsftpd, on va fusionner ces deux derniers :
Code BASH :
cat key.pem cert.pem >key-cert.pem 

Pour finir, expliquons à vsftpd qu'il doit gérer le SSL et que les logins/passwords ainsi que tout le transite ftp, devront être cryptés, et ou se trouve le certificat et la clé SSL.
Code BASH :
nano /etc/vsftpd.conf
 
listen=NO
anonymous_enable=NO
local_enable=YES
virtual_use_local_privs=YES
write_enable=YES
connect_from_port_20=YES
pam_service_name=vsftpd
guest_enable=YES
guest_username=www-data
user_sub_token=/var/www/$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
xferlog_enable=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
 
# Pour le SSL
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=YES
 
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
rsa_cert_file=/etc/CA/key-cert.pem


Voili voilou, on relance vsftpd et l'affaire et dans le sac. A noter que tout les clients ftp ne gère pas forcément le ftps ou ftpes Pour moi cela a fonctionné avec FileZilla en mode ftpes
 
 
Note: Aucune note
(0 note)
Ecrit par: le furtif, Le: 17/06/10