Suggestion : Undefined index: dark_nature dans le fichier /web/tekniko/linux/kernel/header.php à la ligne 243
Suggestion : Undefined index: dark_nature dans le fichier /web/tekniko/linux/kernel/header.php à la ligne 244
Un coin perdu... : Articles - 3 - How to : FTP over SSL
Rss 3 - How to : FTP over SSL
Nous venons de voir comment mettre en oeuvre de facon securise un serveur ftp avec vsftpd/pam/xinetd, nous allons voir maintenant, afin de nous securiser un peu plus, comment crypter ces echanges ftp avec OpenSSL.

OpenSSL c'est quoi ? Et bien c'est une boite a outils comme dit sur le Wikipedia, des bibliotheques ainsi que des commandes en ligne, et avec ces outils, nous allons pouvoir crypter nos echanges, c'est le meme principe que lorsque vous achetez un produit quelconque sur le web, generalement, au moment de banquer vous devez signer un certificat de securite un peu obscur, puis vous passez en mode "securise" (https), a partir de la, les donnees qui transitent entre vous et le "site" (numero de carte bancaire, coordonnees etc...) sont cryptees. C'est le resultat d'Openssl couple au serveur Apache, nous, nous allons le coupler a Vsftpd, le principe restera le meme mise a part que ce sera le protocole ftp qui sera crypte (ftps)et non http.

Ah oui, cette histoire de certificat...En quoi cela ajoute t'il une securite ?? Normalement, on se creer un certificat avec nos coordonnees, mail, le domaine du site..., puis on le soumet a un organisme de verification qui certifiera de notre identite en signant notre certif, comme ca, le client qui va voir notre beau certificat constatera que machin l'a verifie et il pourra donc le signer et ainsi avoir une confiance aveugle, ou presque.

c'est super mais ca 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 meme !

Commencons !

Nous repartons sur la configuration du premier article, donc notre serveur ftp est deja fonctionnel, il ne reste plus qu'a installer OpenSSL, generer 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 necessaire mais il est tres probable qu'il soit deja installe. Le fait qu'il soit installe ne veut pas dire qu'il ne reste qu'a ajouter deux ou trois choses. On va commencer par creer un repertoire qui contiendra deux sous repertoires, un pour la base de donnees des certificats que nous signerons (prive), un autre pour les demande et ceux que l'on generera (newcerts).
Code BASH :
mkdir /etc/CA     # CA pour Certificat d'Autorite.
cd CA
mkdir prive newcerts

Jusque la rien de transcendant, creons la base de donnees qui accueillera les futurs certificats que nous signerons :
Code BASH :
echo '01' > serial
touch index.txt

Maintenant, nous allons creer un fichier de configuration specifique que nous agrementerons au fur et a mesure du courant. Pour le moment, on y met que ca :
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 cles generees 
 default_md = md5 message # algorithme de 
 string_mask = # nombstr permis caracteres 
 distinguished_name = req_distinguished_name 
 
 ] Req_distinguished_name [ 
 # Nom de la variable de chaîne rapide 
 #---------------------- --------------------------- ------- 
 0.organizationName = Nom organisation (entreprise) 
 organizationalUnitName = Unite organisation Nom (departement, division) 
 emailAddress = Adresse Email 
 emailAddress_max = 40 
 Nom Localite localityName = (ville, district) 
 stateOrProvinceName = nom etat 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 defaut pour ce qui precede, par souci de coherence et moins de frappe. 
 # Nom de la variable Valeur 
 #------------------------------ ------------------- ----------- 
 0.organizationName_default = La Societe echantillon 
 localityName_default = Metropolis 
 stateOrProvinceName_default = New York 
 countryName_default = US 
 
 [V3_ca] 
 basicConstraints = CA: TRUE 
 subjectKeyIdentifier = hash 
 authorityKeyIdentifier = keyid: toujours, l'emetteur: toujours 

Voila tout ce qu'il faut preciser pour commencer, ce fichier est modulaire, differentes 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 coordonnees propre a la demande d'un certificat qui soit la mais nous pouvons des maintenant creer 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 requete pour avoir un nouveau certificat signable, il devrait placer la certificat d'autorite dans le repertoire courant (/etc/CA si on est deja dedans), celui ci sera valable 650 jours, et la cle privee qui va avec dans private, et il devra faire tout ca en fonction de la configuration presente dans son fichier de conf.

Dors et deja, avec notre nouveau certificat d'autorite racine (cacert.pem), nous pouvons creer n'importe quel nombre de "sous" certificats pour differentes applications (https, fpts, simap...). Il faut maintenant creer l'invitation a signer notre certificat, on va rajouter des parametres au fichier de conf :
Code BASH :
 req_extensions = v3_req

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

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

Ce processus cree deux fichiers, une cle prive key.pem et l'invitation a signer qui va avec req.pem, qu'il serait preferable de renommer si on utilise SSL sur plusieurs services.

On a notre certificat d'autorite racine, on a notre invitation a signer, certifions nous en nous signant alors ! Une derniere fois, on edite le fichier de conf pour lui rajouter les choses qui vont bien, a savoir la ou il trouvera la base de donnees, ou est la cle privee... 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 creer deux nouveau fichiers, notre certificat signe (enfin) et une copie de celui ci dans newcerts. Ce certificat comporte deux version, une codee, une humainement comprehensible, enlevons cette derniere pour plus de securite :
Code BASH :
mv cert.pem tmp.pem 
openssl x509 -in tmp.pem -out cert.pem 

L'installation du certificat et de sa cle depend 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 a vsftpd qu'il doit gerer le SSL et que les logins/passwords ainsi que tout le transite ftp, devront etre cryptes, et ou se trouve le certificat et la cle 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 gere pas forcement le ftps ou ftpes Pour moi cela a fonctionne avec FileZilla en mode ftpes
 
 
Note: Aucune note
(0 note)
Ecrit par: le furtif, Le: 17/06/10