Outils pour utilisateurs

Outils du site


ssl

Différences

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


Révision précédente
ssl [2023/11/30 16:59] (Version actuelle) – [Configuration d'Apache avec SSL/TLS] admin
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>chiffrement 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 center round important 60%>
 +<wrap em>La clé privée ne doit jamais être diffusée</wrap>
 +</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 d'une <wrap em>demande de signature de certificat (Certificate signing request)</wrap> : on devra renseigner les coordonnées de l'entreprise<WRAP right round tip 30%>
 +si la signature est faite par la même machine que la demande, le <wrap em>certificat est auto-signé</wrap> et génèrera une alerte sur les navigateurs
 +</WRAP>
 +<code lscript>openssl req -new -key <nom_fichier_cle> -out <nom_certif_generic.csr> </code>
 +
 +  * signature et création du certificat au 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__
 +<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 right round important 30%>
 +Penser à adapter les valeurs à votre environnement
 +</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 Apache2
 +
 +  a2enmod ssl
 +  
 +//remarque// : Si le module est déjà activé, un message l'indique. 
 +<WRAP center round tip 90%>
 +Si la commande a2enmod 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>
 +
 +  
 +**__Contrôle__**
 +
 +On peut alors voir dans le <wrap em>fichier //** /etc/apache2/mods-enabled/ssl.load **//</wrap> 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
 +        # active le SSL
 + SSLEngine on 
 +        # chemin du certificat X509
 + SSLCertificateFile /etc/ssl/certs/GSBCertif.crt  
 +        # chemin de la clé privée
 + SSLCertificateKeyFile /etc/ssl/private/cleGSB.key  
 +</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.
 +
 +==== Redirection de HTTP vers HTTPS ====
 +Lorsqu'on met en place une sécurisation SSL d'un serveur WEB, il peut être intéressant de laisser possible l'accès HTTP (pour les utilisateurs étourdis), mais en forçant le renvoi vers la version HTTPS. 
 +
 +Pour cela, dans le **//VirtualHost//** du port 80, on ajoutera la ligne suivante : 
 +<code apache>
 +<VirtualHost *:80>
 +//ligne à ajouter en adaptantl'adresse du serveur
 +Redirect permanent / https://<IP_ou_FQDN_SERVEUR>/
 +
 +</VirtualHost>
 +</code>
 +
 +===== 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