Outils pour utilisateurs

Outils du site


ssl

Différences

Ci-dessous, les différences entre deux révisions de la page.


Prochaine révision
ssl [2021/09/08 09:50] – créée - modification externe 127.0.0.1
Ligne 1: Ligne 1:
 +====== Sécurisation des applications avec SSL ======
 +
 +===== SSL/TLS  =====
 +
 +Parmi les outils susceptibles de garantir le cryptage, //SSL (Secure Socket Layer : Couche de socket sécurisé)//, défini par la société Netscape en 1994 (V.1) et déployé publiquement en version 2 (1995) s'est imposé comme la technique de sécurisation des échanges en environnement internet. 
 +
 +Il s'applique à tous les protocoles de la couche //application// (couche 7) puisqu'il se positionne plus bas dans le modèle //OSI// (couche 5 : Session). 
 +
 +Il supporte les //certificats X.509//
 +
 +//TLS (Transport Layer Security)// est le nom du protocole depuis 2001, qui remplace la version 3.1 de SSL. Il est maintenant défini par l'//IETF (Internet Engineering Task Force)// qui se charge de normaliser les techniques utilisées sur Internet. 
 +
 +La mise en place d'un service sécurisé par SSL/TLS permettra d'éviter que l'on puisse exploiter le contenu en cas d'interception des échanges entre le client et le serveur. 
 +
 +
 +==== Procédure ====
 +
 +La démarche est commune quel que soit le service que l'on souhaite sécuriser. 
 +Seuls les fichiers à modifier changent d'un service à l'autre.
 +<WRAP left round box 60%>
 +  - Créer le répertoire pour stocker les clés et certificats
 +  - Créer la clé privée 
 +  - Créer le certificat X509 à partir de la clé privée en renseignant toutes les informations demandées
 +  - Paramétrer le service concerné 
 +    - activer le module, 
 +    - configurer les fichiers pour qu'ils utilisent la clé et le certificat
 +    - mettre en écoute sur les ports spécifiques
 +    - redémarrer le service pour prendre en compte les modifications
 +  - Tester depuis un client en lui indiquant l'adresse et le port adéquats
 +  - Éventuellement, accepter le certificat auto-signé (<wrap em>attention, cela peut être un danger si on ne connaît pas la source</wrap>). 
 +</WRAP>
 +
 +==== Mode opératoire ====
 +
 +=== Mise en place d'un certificat avec OpenSSL ===
 +
 +{{ :commandesopenssl.png?direct&300|}}
 +//OpenSSL// est une transposition //Open Source// ([[http://www.openssl.org/]]) des préconisations de l'IETF pour la mise en place d'une couche sécurisée. 
 +Le nom est resté //OpenSSL// mais la bibliothèque supporte aussi la version TLS. 
 +//OpenSSL// gère de nombreux <wrap em>algorithmes de cryptage</wrap> (AES, DES, RSA,...) et <wrap em>algorithmes de hachage</wrap> (SHA, MD5, …).
 +
 +__Installer la bibliothèque OpenSSL__ 
 +<code lscript>apt install openssl</code>
 +
 +__Installer les outils de manipulation des éléments de sécurité__
 +<code lscript>apt install easy-rsa</code>
 +
 +Cet outil propose notamment des commandes pour la création de clé secrète (//gendh//, //genrsa//, ...) ou la génération de certificat (//x509//).
 +
 +== 1 : Création d'une clé privée ==
 +
 +La base des techniques de <wrap em>cryptage asymétrique</wrap> repose sur la présence, à un endroit unique, d'une **//clé privée//**. 
 +Elle permettra de créer une **//clé publique//** (dans un **//certificat//**) et de décrypter ce qui aura été chiffré par cette **//clé publique//**. 
 +
 +On utilisera (pour l'algorithme RSA) la commande **//genrsa//** de //OpenSSL//.
 +<code lscript>openssl genrsa -out <nom_fichier_cle> <taille_cle></code>
 +
 +__Exemple : créer une clé privée dans le dossier private__
 +
 +<code lscript>
 +cd /etc/ssl/private
 +openssl genrsa -out cleGSB.key 2048
 +</code> {{ :clersa.png?direct&200|}}
 +
 +On pourra alors éditer la clé (avec nano) et en lire le contenu (évidemment inaccessible). 
 +Cette même clé peut servir à établir des certificats différents pour des usages distincts (serveur FTP, serveur Web, messagerie, etc). 
 +
 +== 2 : Création d'un certificat X509 ==
 +
 +<wrap em>La clé privée ne doit jamais être diffusée</wrap>. On va donc générer la **//partie publique//** sous forme d'un <wrap em>certificat</wrap>
 +
 +Pour que ce dernier soit accessible aux navigateurs, on a recours au format standard X509. 
 +
 +Les certificats sont à stocker dans le dossier **//certs//** du dossier SSL.
 +
 +La création va donc passer par deux étapes : 
 +  * Création d'un certificat générique (on devra renseigner les coordonnées de l'entreprise)
 +
 +<code lscript>openssl req -new -key <nom_fichier_cle> -out <nom_certif_generic.csr> </code>
 +
 +  * Transformation vers un format X509
 +
 +<code lscript>openssl x509 -req -days <nb_jours> -in <nom_certif_generic.csr> -signkey <nom_fichier_cle> -out <nom_certif_X509.crt></code>
 +
 +__Exemple : création d'un certificat dans le dossier des certificats SSL à partir de la clé RSA__
 +<WRAP group>
 +<WRAP half column>
 +<code lscript>
 +cd /etc/ssl/certs
 +openssl req -new -key ../private/cleGSB.key -out GSBCertGen.csr
 +openssl x509 -req -days 365 -in GSBCertGen.csr -signkey ../private/cleGSB.key -out GSBcertif.crt 
 +</code>
 +</WRAP>
 +
 +<WRAP half column>
 +<WRAP center round important 60%>
 +Penser à adapter les valeurs à votre environnement
 +</WRAP>
 +</WRAP>
 +</WRAP>
 +
 +Le certificat est alors prêt. 
 +
 +Il  reste à configurer les services susceptibles de s'appuyer sur ce certificat.
 +
 +
 +===== Configuration d'Apache avec SSL/TLS =====
 +
 +La configuration nécessite l'activation du module SSL pour Apache 
 +
 +  a2enmod ssl
 +  
 +//remarque// : Si le module est déjà activé, un message l'indique. 
 +
 +<WRAP center round tip 60%>
 +Si la commande ne fonctionne pas, faire les commandes suivantes :
 +  * cp  /etc/apache2/mods-available/ssl.load  /etc/apache2/mods-enabled/
 +  * cp  /etc/apache2/mods-available/ssl.conf  /etc/apache2/mods-enabled/
 +  * cp  /etc/apache2/mods-available/socache_shmcb.load  /etc/apache2/mods-enabled/
 +  * systemctl restart apache2 ou service apache2 restart
 +</WRAP>
 +
 +  
 +
 +On peut alors voir dans ///etc/apache2/mods-enabled/ssl.load// que la ligne ci-dessous est dé-commentée
 +
 +<code apache>LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so </code>
 +
 +Dans le fichier //ports.conf// de Apache, on vérifiera que le serveur écoute sur le port standard 443 (ou sur un autre port si on souhaite faire une configuration personnalisée). 
 +
 +Se placer dans le dossier // /etc/apache2/sites-enabled// et ensuite éditer le fichier //000-default.conf// (ou dans // /etc/apache2/httpd.conf//).
 +<code lscript>
 +cd /etc/apache2/sites-enabled
 +nano 000-default.conf
 +</code>
 +On <wrap em>ajoutera</wrap> un hôte virtuel pour cette écoute : 
 +<code apache>
 +#on adaptera le numéro de port conformément à ce qui a été écrit dans ports.conf
 +<VirtualHost *:443>
 + DocumentRoot /var/www/html
 + SSLEngine on # active le SSL
 + SSLCertificateFile /etc/ssl/certs/GSBCertif.crt # chemin du certificat X509
 + SSLCertificateKeyFile /etc/ssl/private/cleGSB.key # chemin de la clé privée
 +</VirtualHost>
 +</code>
 +
 +Il faudra redémarrer Apache, qui indiquera si une erreur éventuelle est rencontrée (dans le chemin, dans le nom du fichier, dans le contenu du certificat, etc).
 +
 +__Contrôle depuis un navigateur__
 +
 +Dans la barre de navigation du navigateur, on tapera [[https://<adresseServeur>]].
 +
 +{{:connexionnoncertifieee.png?direct&300|}}
 +
 +Du fait que le certificat que nous avons créé n'est pas garanti par un organisme officiel, le navigateur met en garde sur le manque de confiance accordée à un certificat signé par son créateur. 
 +On doit vérifier qu'un cadenas fermé au bas du navigateur atteste d'une navigation sécurisée.
 +
 +===== Configuration de ProFTP avec SSL/TLS =====
 +
 +Pour commencer, on devra indiquer dans le fichier ///etc/proftpd/modules.conf// qu'il faut activer TLS
 +
 +<code lscript>LoadModule mod_tls.c</code>
 +
 +On ira ensuite préciser au fichier //proftpd.conf// d'inclure le fichier de configuration de TLS en dé-commentant la ligne suivante : 
 +
 +<code apache>Include /etc/proftpd/tls.conf</code>
 +
 +Dans ce fichier //tls.conf// on devra trouver au minimum les éléments : 
 +<code apache>
 +<IfModule mod_tls.c>
 + TLSEngine on #active le TLS
 + TLSLog /var/log/proftpd/tls.log # dossier pour enregistrer les journaux tls
 + TLSProtocol SSLv23 # versions supportées (2 et 3)
 + TLSRSACertificateFile /etc/ssl/certs/GSBCertif.crt #chemin du certif
 + TLSRSACertificateKeyFile /etc/ssl/private/cleGSB.key # chemin de la clé
 + TLSVerifyClient off # n'oblige pas l'authentification des clients pour TLS
 + #TLSRequired on # peut obliger les clients à utiliser TLS
 +</IfModule>
 +</code>
 +
 +Il faudra bien entendu redémarrer le service //proftpd// qui indiquera si une erreur est rencontrée (dans le chemin, dans le nom du fichier, dans le contenu du certificat, etc).
 +
 +==== Test depuis le client ====
 +
 +On accèdera depuis un client FTP en contactant le serveur par une connexion //FTP SSL/TLS Explicite// (ici sous FileZilla Client).
 +
 +{{:clientftp.png?direct|}}
 +
 +
 +On rencontrera une mise en garde indiquant que le certificat n'étant pas garanti par un tiers (il est auto-signé).
 +
 +{{:accesnoncertifieftp.png?direct|}}
 +===== Sources =====
 +
 +  * [[http://httpd.apache.org/docs/trunk/fr/ssl/ssl_intro.html]] : sur le site de Apache, une explication détaillée des principes du chiffrement, du rôle d'un certificat, des déclinaisons de SSL/TLS
  
ssl.txt · Dernière modification : 2023/11/30 16:59 de admin