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 10/03/2018, 12:30] – [Création du certificat] Bruno | 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> |
| ---- | ---- | ||
| ====== Utiliser HTTPS avec Apache2 ====== | ====== Utiliser HTTPS avec Apache2 ====== | ||
| - | Ce tutoriel présente une procédure permettant de servir des pages web [[: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). | 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). | ||
| Ligne 11: | Ligne 11: | ||
| ==== Le protocole TLS ==== | ==== Le protocole TLS ==== | ||
| - | Le protocole [[|https:// | + | Le protocole [[https:// |
| - | Il doit assurer l' | + | 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. |
| ==== Les Certificats ==== | ==== Les Certificats ==== | ||
| - | [[https:// | + | [[https:// |
| - | 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 ===== | ||
| Ligne 35: | Ligne 33: | ||
| Pour que le protocole TLS puisse fonctionner avec le Serveur HTTP Apache2, il faut activer le module **ssl** avec la commande : | Pour que le protocole TLS puisse fonctionner avec le Serveur HTTP Apache2, il faut activer le module **ssl** avec la commande : | ||
| < | < | ||
| - | puis recharger la configuration d' | + | |
| + | puis recharger la configuration d' | ||
| < | < | ||
| - | Ou si vous êtes sur une ancienne version d' | ||
| - | < | ||
| - | ==== Création du certificat avec Let'encrypt ==== | + | Pour vérifier l'activation du module: |
| + | < | ||
| - | Prérequis : | + | ==== Création du certificat avec Let's encrypt ==== |
| - | * avoir un nom de domaine pleinement qualifié | + | |
| + | Prérequis : | ||
| + | * avoir un nom de domaine pleinement qualifié | ||
| + | * avoir un enregistrement DNS mettant en correspondance le nom de domaine et l' | ||
| * avoir un serveur web apache déjà configuré, fonctionnel et accessible publiquement. | * avoir un serveur web apache déjà configuré, fonctionnel et accessible publiquement. | ||
| === Installation de Certbot === | === Installation de Certbot === | ||
| - | Les instructions pour installer et utiliser simplement certbot sont disponibles en anglais [[https:// | ||
| - | En voici, un récapitulatif. | + | Il suffit |
| - | < | + | < |
| - | sudo apt install software-properties-common | + | |
| - | sudo add-apt-repository ppa: | + | |
| sudo apt update | sudo apt update | ||
| sudo apt install certbot</ | sudo apt install certbot</ | ||
| + | <note tip>Il peut être nécessaire aussi d' | ||
| === Générer le certificat avec Certbot === | === Générer le certificat avec Certbot === | ||
| - | Certbot dispose de très nombreuses options qui sont documentées en anglais [[hhttps:// | + | Certbot dispose de très nombreuses options qui sont documentées en anglais [[hhttps:// |
| - | Voici une des méthode | + | == 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 --apache | ||
| + | </ | ||
| + | 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 | ||
| - | < | + | < |
| Cette commande va générer un certificat valable pour les domaines (option -d) example.com et www.example.com, | Cette commande va générer un certificat valable pour les domaines (option -d) example.com et www.example.com, | ||
| - | À l' | + | À l' |
| L’emplacement du certificat et de la clé privée est indiqué à la fin de la procédure, typiquement : | L’emplacement du certificat et de la clé privée est indiqué à la fin de la procédure, typiquement : | ||
| Ligne 71: | Ligne 77: | ||
| * **/ | * **/ | ||
| - | === Configuration de l' | + | ==== Configuration de l' |
| + | <note important> | ||
| + | [[: | ||
| + | <code apache> | ||
| + | < | ||
| + | ServerName example.com | ||
| + | ServerAlias www.example.com | ||
| + | ServerAdmin webmaster@example.com | ||
| + | DocumentRoot / | ||
| + | < | ||
| + | Options -Indexes +FollowSymLinks +MultiViews | ||
| + | AllowOverride none | ||
| + | Require all granted | ||
| + | </ | ||
| + | ErrorLog / | ||
| + | CustomLog / | ||
| + | </ | ||
| + | </ | ||
| + | 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 | ||
| + | </ | ||
| - | ==== Configuration Apache2 ==== | + | # directives obligatoires pour TLS |
| + | SSLEngine on | ||
| + | SSLCertificateFile | ||
| + | SSLCertificateKeyFile | ||
| + | |||
| + | Header always set Strict-Transport-Security " | ||
| - | === Méthode 1 : en se basant sur la configuration du site par défaut === | + | ErrorLog |
| - | + | CustomLog | |
| - | * Se placer dans le dossier de configuration des sites apache : < | + | |
| - | * 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 == | + | |
| - | + | ||
| - | Ayant déjà configuré notre hôte virtuel **site1.com**, | + | |
| - | + | ||
| - | Voici le contenu de ce fichier : | + | |
| - | < | + | |
| - | < | + | |
| - | 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: | + | --- // |
