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 08/10/2017, 13:28] – [Création du certificat] Maveric | 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> | + | {{tag>tutoriel |
| ---- | ---- | ||
| - | ====== | + | ====== |
| - | Ce tutoriel présente une procédure permettant de sécuriser un [[:tutoriel: | + | Ce tutoriel présente une procédure permettant de servir des pages web [[:apache2# |
| + | 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). | ||
| ===== Introduction ===== | ===== Introduction ===== | ||
| - | ==== Le protocole | + | ==== Le protocole |
| - | SSL est un protocole | + | Le protocole |
| + | Il assure authentification du serveur, le chiffrement des données en transit et le contrôle de leur intégrité. Les informations échangées entre les deux machines sont de ce fait pratiquement inviolables. | ||
| - | Ce protocole permet à deux machines de communiquer de manière sécurisée. Les informations échangées entre les deux machines sont de ce fait inviolables. | ||
| - | |||
| - | Le protocole SSL se traduit par la combinaison de deux protocoles bien distincts (// | ||
| - | |||
| - | [[http:// | ||
| ==== Les Certificats ==== | ==== Les Certificats ==== | ||
| - | Un certificat permet de fournir diverses informations concernant l' | + | [[https:// |
| - | De même, afin de garantir l' | + | Afin de garantir l' |
| - | 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 signer eux-même leur certificat. Ce faisant, il est à noter que dans ce cas, le certificat ne sera pas reconnu par les navigateurs web comme étant certifié. | + | Un certificat auto-signé n'est pas reconnu |
| - | [[http://www.cacert.org|CA Cert]] permet d' | + | Les autorités de certification font payer leur service. Cependant[[https://letsencrypt.org/|Let's encrypt]] permet |
| - | [[https:// | + | Pour ce tutoriel, nous supposons que nous avons déjà mis en place un [[:apache2# |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | Pour ce tutoriel, nous supposons que nous avons déjà mis en place un [[:tutoriel: | + | |
| ===== Mise en application avec le Serveur Http Apache2 ===== | ===== Mise en application avec le Serveur Http Apache2 ===== | ||
| - | ==== Activation du module SSL ==== | + | ==== Activation du module SSL/TLS ==== |
| - | Pour que le protocole | + | Pour que le protocole |
| - | sudo a2enmod ssl | + | < |
| - | puis recharger la configuration d' | + | |
| - | sudo service apache2 force-reload | + | |
| - | Ou si vous êtes sur une ancienne version d' | + | |
| - | sudo /etc/init.d/apache2 force-reload | + | |
| - | ==== Création du certificat ==== | + | puis recharger la configuration d' |
| + | < | ||
| - | Installer si necessaire le package | + | Pour vérifier l' |
| + | < | ||
| - | < | + | ==== Création du certificat avec Let's encrypt ==== |
| - | Pour générer un certificat auto-signé avec Ubuntu, il nous suffit de taper les commandes suivantes dans un terminal | + | Prérequis |
| - | * Créer le certificat ssl :< | + | * avoir un nom de domaine pleinement qualifié acheté auprès |
| - | * Pour un certificat | + | * avoir un enregistrement DNS mettant en correspondance le nom de domaine et l' |
| - | * troisième option : suivre ce [[tutoriel: | + | * avoir un serveur web apache déjà configuré, fonctionnel |
| - | * Une autre option est d' | + | |
| - | <note important> | + | === Installation de Certbot === |
| + | Il suffit d' | ||
| + | <code bash> | ||
| + | sudo apt update | ||
| + | sudo apt install certbot</ | ||
| + | <note tip>Il peut être nécessaire aussi d' | ||
| - | === Hardy Heron === | + | === Générer le certificat avec Certbot |
| + | Certbot dispose de très nombreuses options qui sont documentées en anglais [[hhttps:// | ||
| - | On peut créer son certificat SSL auto signé en [[: | + | == Méthode n°1 == |
| + | Le script | ||
| + | <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 | ||
| - | Plutôt que de repartir de l' | + | <code bash>sudo certbot certonly |
| - | | + | |
| - | **Explications :** | + | Cette commande va générer un certificat |
| - | * **-x509 -nodes** donne le type de certificat | + | |
| - | * **-days 365** indique la durée de validité | + | |
| - | * **-newkey rsa:1024** demande une clé RSA de 1024 bits - d' | + | |
| - | * **-out / | + | |
| - | * **-keyout | + | |
| - | Répondez alors aux questions posées : | + | À l' |
| - | Country Name (2 letter code) [GB]: | + | |
| - | Entrez **FR** si vous êtes situé en France et validez par la touche « Entrée » | + | |
| - | State or Province Name (full name) [Some-State]: | + | |
| - | Entrez **FRANCE** | + | |
| - | Locality Name (eg, city) []: | + | |
| - | Indiquez ici le nom de votre ville. (//exemple :// **CAEN**) et validez par la touche « Entrée » | + | |
| - | 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, | + | |
| - | Common Name (eg, YOUR name) []: | + | |
| - | 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 | + | L’emplacement du certificat et de la clé privée |
| - | sudo chmod o-rw /etc/apache2/server.key | + | * **/etc/letsencrypt/live/ |
| + | * **/ | ||
| - | <note important> | + | ==== Configuration de l' |
| - | Mentionner, dé-commenter (avec #) ou modifier le chemin des certificats précédemment généré dans le fichier default-ssl.conf, | + | |
| - | "/ | + | |
| + | <note important> | ||
| - | Ligne par defaut | + | [[: |
| - | SSLCertificateFile | + | <code apache> |
| - | SSLCertificateKeyFile | + | < |
| - | SSLCertificateChainFile / | + | |
| - | Ligne modifier | + | |
| - | # | + | |
| - | | + | |
| - | | + | <Directory |
| - | + | Options -Indexes +FollowSymLinks +MultiViews | |
| - | On active la configuration | + | AllowOverride none |
| - | a2ensite default-ssl.conf | + | Require all granted |
| - | On relance apache | + | </Directory> |
| - | service apache2 restart | + | ErrorLog |
| - | On fait un test | + | CustomLog |
| - | openssl s_client -connect localhost: | + | </VirtualHost> |
| - | + | </ | |
| - | //[[: | + | |
| - | + | ||
| - | <note important> | + | |
| - | + | ||
| - | ==== Configuration Apache2 ==== | + | |
| - | + | ||
| - | === Méthode 1 : en se basant sur la configuration du site par défaut === | + | |
| - | + | ||
| - | * Se placer dans le dossier de configuration des sites apache : <code> | + | |
| - | * Recopier la configuration par défaut pour la nouvelle configuration ssl :< | + | |
| - | * Assigner le port ssl :< | + | |
| - | * Ajouter les directives '' | + | |
| - | * Activer la configuration du site ssl :< | + | |
| - | + | ||
| - | === Méthode 2 === | + | |
| - | + | ||
| - | == Ajout de la directive Listen 443 == | + | |
| - | + | ||
| - | 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, [[: | + | |
| - | Listen 443 | + | |
| - | == 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 **site1.com**, un fichier de configuration nommé **site1.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 site1.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 |
| + | < | ||
| - | - Directive **SSLEngine** :\\ Cette directive permet d' | + | Votre site devrait maintenant être accessible en HTTP et en HTTPS. |
| - | - Directive **SSLCertificateFile** :\\ Cette directive définit le certificat authentifiant le Serveur auprès des clients. L' | + | |
| - | - Directive **SSLCertificateKeyFile** :\\ Cette directive définit la clé privée du Serveur utilisée pour signer l' | + | |
| - | Par ailleurs, comme nous l'avons déjà fait pour notre hôte virtuel accessible sur le **port 80**, nous allons devoir rajouter une directive **NameVirtualHost** qui permettra que l'adresse nommée par le nom de notre hôte virtuel | + | === Forcer la connexion en HTTPS === |
| - | Nous rajouterons donc cette directive (// | + | Si vous voulez que votre site ne soit accessible qu'en HTTPS et que les internautes soient redirigés automatiquement, modifiez ainsi votre fichier d'hôte virtuel : |
| - | Enfin, afin que les clients puissent continuer d' | + | <code apache> |
| + | < | ||
| + | ServerName example.com | ||
| + | ServerAlias www.example.com | ||
| + | ServerAdmin webmaster@example.com | ||
| + | # Redirection 301 vers le site en HTTPS | ||
| + | Redirect permanent / https://example.com/ | ||
| + | </ | ||
| - | Voici donc le contenu de notre fichier une fois modifié : | + | <VirtualHost *:443> |
| - | <file> | + | |
| - | NameVirtualHost 192.168.0.2:443 | + | ServerAlias www.example.com |
| + | ServerAdmin webmaster@example.com | ||
| + | DocumentRoot / | ||
| + | < | ||
| + | Options -Indexes +FollowSymLinks +MultiViews | ||
| + | AllowOverride none | ||
| + | Require all granted | ||
| + | </ | ||
| - | < | + | # directives obligatoires pour TLS |
| - | | + | |
| - | | + | SSLCertificateFile |
| - | </ | + | SSLCertificateKeyFile |
| + | |||
| + | Header always set Strict-Transport-Security " | ||
| - | < | + | ErrorLog |
| - | ServerName nuxwin.com | + | CustomLog |
| - | DocumentRoot | + | |
| - | + | ||
| - | SSLEngine on | + | |
| - | SSLCertificateFile | + | |
| - | SSLCertificateKeyFile / | + | |
| </ | </ | ||
| - | </file> | + | </code> |
| - | + | Enregistrez le fichier et rechargez la configuration | |
| - | + | < | |
| - | ==== Relance du serveur HTTP Apache2 ==== | + | |
| - | Afin que les modifications que nous venons | + | |
| - | + | ||
| - | Pour ce faire, il suffit de taper la commande suivante dans un terminal | + | |
| - | sudo / | + | |
| - | Normalement, | + | |
| - | ---- | + | |
| - | + | ||
| - | ====Voir aussi==== | + | |
| - | **(fr)** [[https:// | + | |
| - | **(fr)** [[http:// | + | Votre site devrait maintenant être accessible uniquement en HTTPS. |
| + | ==== Renforcer la sécurité ==== | ||
| - | **(fr)** | + | Si vous voulez optimiser la sécurité des échanges en HTTPS, le plus simple est d' |
| - | //Contributeurs : [[utilisateurs:M. DECLERCQ]], [[utilisateurs: | + | --- // |
