Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| tutoriel:securiser_apache2_avec_ssl [Le 06/06/2007, 12:02] – commande inutile micheld | tutoriel:securiser_apache2_avec_ssl [Le 13/11/2024, 16:09] (Version actuelle) – [Création du certificat avec Let's encrypt] install python3-certbot-apache bcag2 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | {{tag>feisty | + | {{tag>tutoriel |
| - | ====== Sécuriser Apache2 avec SSL ====== | + | ---- |
| - | Ce tutoriel présente une procédure permettant de sécuriser un [[: | + | |
| - | ===== Le protocole SSL ===== | + | ====== |
| + | Ce tutoriel présente une procédure permettant de servir des pages web [[: | ||
| + | Avec HTTPS, les échanges HTTP entre le client et le serveur sont chiffrés (et donc sécurisés) via le protocole TLS (ou autrefois SSL). | ||
| - | SSL est un protocole qui a été développé par la société Netscape. | + | ===== Introduction ===== |
| - | Ce protocole | + | ==== Le protocole |
| - | Le protocole | + | Le protocole |
| + | Il assure authentification du serveur, | ||
| - | [[http:// | ||
| - | ===== Mise en application avec le Serveur Http Apache2 ===== | + | ==== Les Certificats |
| - | ==== Activation du module SSL ==== | + | [[https:// |
| - | Pour que le protocole SSL puisse fonctionner avec le Serveur HTTP Apache2, il faut activer le module | + | |
| - | sudo a2enmod ssl | + | |
| - | puis recharger la configuration d' | + | |
| - | sudo /etc/init.d/apache2 force-reload | + | |
| + | Afin de garantir l' | ||
| + | Un certificat auto-signé n'est pas reconnu comme digne de confiance par les navigateurs web et générera un avertissement. | ||
| + | Les autorités de certification font payer leur service. Cependant[[https:// | ||
| + | Pour ce tutoriel, nous supposons que nous avons déjà mis en place un [[: | ||
| + | ===== Mise en application avec le Serveur Http Apache2 ===== | ||
| + | ==== Activation du module SSL/TLS ==== | ||
| - | ==== Les Certificats ==== | + | Pour que le protocole TLS puisse fonctionner avec le Serveur HTTP Apache2, il faut activer le module |
| - | Un certificat permet de fournir diverses informations concernant l' | + | < |
| - | De même, afin de garantir l' | + | puis recharger la configuration |
| + | < | ||
| - | Dans la plupart des cas, l'obtention d'un Certificat certifié par une autorité officielle ayant un prix assez élevé, les webmasters auront tendance a vouloir signé eux-même leur certificat. Ce faisant, il est à noter que dans ce cas, le certificat ne sera pas reconnu par les navigateurs internet comme étant certifié. | + | Pour vérifier |
| + | < | ||
| - | >Dans ce tutoriel, la procédure présentée explique la marche à suivre pour mettre en place un **Site Web sécurisé via protocole SSL en utilisant un Certificat auto-signé**. | + | ==== Création du certificat avec Let's encrypt ==== |
| - | Pour ce tutoriel, nous supposons que nous avons déjà mis en place un [[: | + | Prérequis : |
| + | * avoir un nom de domaine pleinement qualifié acheté auprès d'un bureau d’enregistrement (nous utiliserons example.com dans la suite) ; | ||
| + | | ||
| + | * avoir un serveur web apache déjà configuré, fonctionnel et accessible publiquement. | ||
| - | === Avant Feisty Fawn === | + | === Installation de Certbot |
| - | FIXME tester si la procédure pour feisty fonctionne sous Edgy et Dapper. Si oui, supprimer cette partie.\\ | + | Il suffit |
| - | Pour générer un certificat auto-signé avec Ubuntu, il nous suffit | + | < |
| - | **1.** On se place dans le répertoire dans lequel le certificat doit être généré | + | sudo apt update |
| - | < | + | sudo apt install certbot</ |
| - | cd / | + | <note tip>Il peut être nécessaire aussi d' |
| - | </ | + | |
| - | **2.** On lance la commande de génération : | + | |
| - | <code> | + | |
| - | sudo apache2-ssl-certificate | + | |
| - | </code> | + | |
| - | (Note: par défaut, apache2-ssl-certificate génère un certificat valable 1 mois. Il est possible d' | + | |
| - | === Sous Feisty Fawn === | + | === Générer le certificat avec Certbot |
| + | Certbot dispose de très nombreuses options qui sont documentées en anglais [[hhttps:// | ||
| - | La commande apache2-ssl-certificate n' | + | == Méthode n°1 == |
| + | Le script est très bien fait, ce qui implique qu'il est possible de simplement lancer, pour un serveur avec apache: | ||
| + | <code bash> | ||
| + | sudo certbot | ||
| + | </ | ||
| + | Le script se déroule et pose des questions, à commencer par les domaine à passer en https, puis si on veut rediriger http vers https… | ||
| + | == Méthode n°2 == | ||
| + | Une autre méthode également simple pour générer un certificat en utilisant le greffon « //webroot// » est: | ||
| - | On peut cependant créer son certificat SSL auto signé en [[: | + | <code bash> |
| - | Plutôt que de repartir de l' | + | Cette commande va générer un certificat valable pour les domaines (option -d) example.com et www.example.com, qui correspondent à un site web existant et fonctionnel placé dans le dossier racine (option |
| - | sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out / | + | |
| - | **Explications :** | + | À l' |
| - | * **-x509 -nodes** donne le type de certificat voulu | + | |
| - | * **-days 365** indique | + | |
| - | * **-newkey rsa:1024** demande | + | |
| - | * **-out | + | |
| - | * **-keyout | + | |
| - | Répondez alors aux questions posées : | + | L’emplacement du certificat |
| - | Country Name (2 letter code) [GB]: | + | |
| - | Entrez **FR** si vous êtes situé en France | + | |
| - | State or Province Name (full name) [Some-State]: | + | |
| - | Entrez | + | |
| - | Locality Name (eg, city) []: | + | |
| - | Indiquez ici le nom de votre ville. (//exemple :// **CAEN**) | + | |
| - | Organization Name (eg, company; recommended) []: | + | |
| - | Indiquez le nom de votre organisation, | + | |
| - | Organizational Unit Name (eg, section) []: | + | |
| - | Indiquez ici le nom de la section de votre organisation, | + | |
| - | | + | |
| - | Ici, il convient de faire particulièrement attention à ce que vous allez entrer. Vous devez indiquer le __nom de domaine__ que vous désirez sécuriser. En ce qui nous concerne, il s'agit du domaine : **nuxwin.com**. Nous indiquons donc **nuxwin.com** et nous validons par la touche « Entrée ». | + | |
| - | Email Address []: | + | |
| - | Ici, il s'agit d' | + | |
| - | Enfin, on empêche les curieux | + | ==== Configuration |
| - | sudo chmod 440 / | + | |
| + | <note important> | ||
| - | ==== Ajout de la directive Listen 443 ==== | + | [[: |
| - | + | <code apache> | |
| - | Par défaut, Apache2 est configuré pour écouter sur le port 80. Il s'agit là de la configuration usuelle d'un Serveur Web. Cependant, le protocole SSL a besoin d'un port spécifique pour pouvoir fonctionner. Il s'agit du **port 443**. | + | < |
| - | + | | |
| - | Nous allons donc rajouter une directive de configuration nommée **Listen** qui permettra d' | + | |
| - | + | | |
| - | Pour ce faire, | + | |
| - | | + | < |
| - | + | Options -Indexes +FollowSymLinks +MultiViews | |
| - | Puis rechargez la configuration du serveur (FIXME pourquoi recharger maintenant puisqu' | + | AllowOverride none |
| - | | + | Require all granted |
| + | </ | ||
| + | ErrorLog /var/log/apache2/ | ||
| + | CustomLog / | ||
| + | </ | ||
| + | </ | ||
| - | ==== Création du fichier de configuration ==== | + | Et ajoutez à la suite l' |
| + | <code apache> | ||
| + | < | ||
| + | ServerName example.com | ||
| + | ServerAlias www.example.com | ||
| + | ServerAdmin webmaster@example.com | ||
| + | DocumentRoot / | ||
| + | < | ||
| + | Options -Indexes +FollowSymLinks +MultiViews | ||
| + | AllowOverride none | ||
| + | Require all granted | ||
| + | </ | ||
| - | Ayant déjà configuré notre hôte virtuel **nuxwin.com**, un fichier de configuration nommé **nuxwin.com.conf** doit exister dans le répertoire **/etc/apache2/sites-available**. | + | # directives obligatoires pour TLS |
| + | SSLEngine on | ||
| + | SSLCertificateFile | ||
| + | SSLCertificateKeyFile | ||
| + | |||
| + | Header always set Strict-Transport-Security " | ||
| - | Voici le contenu de ce fichier : | + | ErrorLog / |
| - | < | + | CustomLog |
| - | < | + | |
| - | DocumentRoot | + | |
| - | ServerName nuxwin.com | + | |
| </ | </ | ||
| </ | </ | ||
| - | **Note :** Il s'agit ici du contenu minimal d'un virtualhost. | ||
| - | Pour sécuriser cet Hôte Virtuel, nous allons donc devoir modifier ce fichier en y ajoutant un hôte virtuel accessible sur le **port 443**, ce dernier contenant des directives particulières qui sont les suivantes | + | Enregistrez |
| + | < | ||
| - | **1.** Directive **SSLEngine** : | + | Votre site devrait maintenant être accessible en HTTP et en HTTPS. |
| - | Cette directive permet d'activer le moteur SSL au sein d'un hôte virtuel, Elle peut prendre deux arguments --> **on/off** | + | === Forcer la connexion en HTTPS === |
| + | Si vous voulez que votre site ne soit accessible qu'en HTTPS et que les internautes soient redirigés automatiquement, | ||
| - | **2.** Directive **SSLCertificateFile** | + | <code apache> |
| + | < | ||
| + | ServerName example.com | ||
| + | ServerAlias www.example.com | ||
| + | ServerAdmin webmaster@example.com | ||
| + | # Redirection 301 vers le site en HTTPS | ||
| + | Redirect permanent / https:// | ||
| + | </ | ||
| - | Cette directive définit le certificat authentifiant le Serveur auprès des clients. L' | + | < |
| + | ServerName example.com | ||
| + | ServerAlias www.example.com | ||
| + | ServerAdmin webmaster@example.com | ||
| + | DocumentRoot | ||
| + | < | ||
| + | Options -Indexes +FollowSymLinks +MultiViews | ||
| + | AllowOverride none | ||
| + | Require all granted | ||
| + | </ | ||
| - | **3.** Directive **SSLCertificateKeyFile** : | + | # directives obligatoires pour TLS |
| + | SSLEngine on | ||
| + | SSLCertificateFile | ||
| + | SSLCertificateKeyFile | ||
| + | |||
| + | Header always set Strict-Transport-Security " | ||
| - | < | + | ErrorLog |
| - | + | CustomLog | |
| - | Toutefois, il convient de noter que le chemin ne sera pas directement celui du fichier. En effet, il s' | + | |
| - | + | ||
| - | Il est découragé, | + | |
| - | + | ||
| - | Par ailleurs, comme nous l' | + | |
| - | Nous rajouterons donc cette directive (// | + | |
| - | + | ||
| - | Enfin, afin que les clients puissent continuer d' | + | |
| - | + | ||
| - | Voici donc le contenu de notre fichier une fois modifié : | + | |
| - | < | + | |
| - | NameVirtualHost 192.168.0.2: | + | |
| - | + | ||
| - | < | + | |
| - | ServerName nuxwin.com | + | |
| - | Redirect / https:// | + | |
| - | </ | + | |
| - | + | ||
| - | < | + | |
| - | ServerName nuxwin.com | + | |
| - | DocumentRoot | + | |
| - | + | ||
| - | SSLEngine on | + | |
| - | SSLCertificateFile /etc/apache2/apache2.pem | + | |
| - | < | + | |
| </ | </ | ||
| </ | </ | ||
| - | < | + | Enregistrez le fichier et rechargez la configuration d' |
| - | ==== Reload du Serveur Http Apache2 ==== | + | <code> sudo systemctl reload |
| - | Afin que les modifications que nous venons d' | + | |
| - | Pour ce faire, il suffit de taper la commande suivante dans un terminal : | + | Votre site devrait maintenant être accessible uniquement en HTTPS. |
| - | sudo /etc/init.d/apache2 reload | + | ==== Renforcer la sécurité ==== |
| - | Normalement, | + | |
| - | ---- | + | Si vous voulez optimiser la sécurité des échanges en HTTPS, le plus simple est d' |
| - | //Contributeurs : [[utilisateurs:_Enchained]], | + | --- // |
