# Ubuntu Server - Apache

Serveur web Linux (composante stack LAMP).

# Apache2 - Configuration HTTPS

<table id="bkmrk-difficult%C3%A9%2A-%3Cdescrip" style="border-collapse: collapse; width: 100%; height: 46.8px; border-width: 1px; border-style: hidden;"><colgroup><col style="width: 20%;"></col><col style="width: 80%;"></col></colgroup><tbody><tr style="height: 46.8px;"><td style="height: 46.8px; border: 1px groove rgb(52,73,94);">[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/NTYintermediaire-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/NTYintermediaire-png.png)  
</td><td style="height: 46.8px; border-width: 1px; background-color: rgb(236,202,250); vertical-align: top;">Difficulté : Intermédiaire

Notions : Chiffrement, Certificats, HTTPS

</td></tr></tbody></table>

---

### <span style="color: rgb(52,73,94);">**<span style="text-decoration: underline;">I. Introduction</span>**</span>

Afin de sécuriser les flux vers le serveur web et garantir l'authenticité de la communication avec le partenaire, il est nécessaire de passer à la version sécurisée du protocole HTTP. Qui est le HTTPS.

Cette procédure vise à mettre en place la configuration nécessaire sur le serveur apache2.

<p class="callout danger">**Prérequis** : Un serveur apache2 doit être installé et fonctionnel.</p>

---

### <span style="color: rgb(52,73,94);">**<span style="text-decoration: underline;">II. Génération des certificats</span>**</span>

#### <span style="color: rgb(35,111,161);">**2.1 Cas du certificat auto-signé**</span>

<p class="callout warning">**Attention**: cette méthode chiffre les communications mais ne garantit pas forcément l'identité du serveur. En effet, pour que cela soit le cas, il faudra faire signer sa requête par une autorité de certification reconnue.</p>

Créer dans le répertoire "<span style="color: rgb(132,63,161);">***/etc/apache2/*** </span>" un répertoire "<span style="color: rgb(132,63,161);">***certificates***</span>".

```bash
mkdir /etc/apache2/certificates && cd /etc/apache2/certificates
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/WP3image-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/WP3image-png.png)

Avec openssl, il va falloir faire 3 choses :

- Créer une clé privée.

```
openssl genrsa -out private.key 2048
```

ici, ***2048*** est la longueur de la clé de chiffrement. ***private.key*** est le nom du fichier.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/H8Yimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/H8Yimage-png.png)

<p class="callout success">***Bonne pratique** : Il est préférable de protéger la clé avec un chiffrement. Ainsi, un mot de passe sera demandé lors de toute lecture de la clé. Pour cela ajouter l'opérande '**<span style="color: rgb(132,63,161);">-aes-256</span>**' après genrsa lors de la génération.*</p>

- Générer une requête (demande de certificat) signée par la clé privée.

```
openssl req -new -key private.key -out server.csr
```

ici, ***private.key*** est le nom du fichier de la clé avec laquelle la demande sera signée. ***server.csr** est le nom du fichier de la requête.*

Il va falloir alors répondre à quelques questions :

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/sScimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/sScimage-png.png)

Le champ ***challenge password** sert à protéger le csr contre l'altération. Il sera en effet demandé lors de la modification ou la révocation de celle-ci. il est optionnel.

On a donc le csr suivant :

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/oFKimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/oFKimage-png.png)

- Signer la requête pour générer le certificat.

```bash
openssl x509 -req -days 365 -in server.csr -signkey private.key -out certificate.crt
```

ici, ***x509*** est le format du certificat voulu.

***365*** est le nombre de jour de validité de certificat (celui-ci expirera dans 365 jours et devra être renouvelé).

***-in*** : la demande que l'on souhaite signer

***-signkey** :* la clé qui servira à signer la demande

***- out*** : le fichier de sortie --&gt; le certificat.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/s1Limage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/s1Limage-png.png)

On a donc le certificat suivant :

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/2Ruimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/2Ruimage-png.png)

<p class="callout success">**Astuce** : il est possible de réaliser les trois actions ci-dessus en une seule commande.</p>

```
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -sha256 -out /etc/apache2/certificates/certificate.crt -keyout /etc/apache2/certificates/private.key
```

#### <span style="color: rgb(35,111,161);">**2.2 Cas du certificat signé par une CA**</span>

Pour garantir l'authenticité de la communication, il est nécessaire de faire valider le certificat par une autorité tierce.

<p class="callout info">**Info** : par exemple [Let's Encrypt](https://letsencrypt.org/)  
</p>

Il faudra alors effectuer les deux premières étapes, à savoir :

- Génération de la clé privée
- Génération de la requête (csr)

Mais au lieu de la signer, le csr sera envoyé à la CA, qui s'assurera d'abord de la légitimité de la requête et nous renverra le certificat signé.

Il faudra alors le déposer dans le dossier des certificats précédemment créé.

---

### <span style="color: rgb(52,73,94);">**<span style="text-decoration: underline;">III. Configuration apache 2</span>**</span>

<p class="callout success">**Bonne pratique** : Il est préférable à ce stade de sécuriser l’accès à la clé privée en limitant son accès. En effet, si un pirate récupère la clé, il pourra lui-même générer un certificat pour usurper l'identité du serveur.  
</p>

```
chown -r root:www-data /etc/apache2/certificates
chmod 440 /etc/apache2/certificates/private.key
```

#### <span style="color: rgb(35,111,161);">**3.1 Activation des modules**</span>

Activer le module apache pour le HTTPS.

```bash
a2enmod ssl
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/0vwimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/0vwimage-png.png)

Redémarrer apache2.

```bash
service apache2 restart
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/WO0image-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/WO0image-png.png)

#### <span style="color: rgb(35,111,161);">**3.2 Configuration apache**</span>

Aller dans : "<span style="color: rgb(132,63,161);">***/etc/apache2/sites-available/***</span>" et éditer le fichier de configuration SSL "<span style="color: rgb(132,63,161);">***default-ssl.conf***</span>".

Modifier les deux lignes suivantes pour qu'elles reflètent la configuration voulue.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/LEuimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/LEuimage-png.png)

Enregistrer et quitter.

Activer le site avec la commande :

```
a2ensite default-ssl.conf
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/M7mimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/M7mimage-png.png)

Recharger le service apache2 pour appliquer toutes les configurations de sites.

```bash
service apache2 reload
```

Le site est désormais accessible en https :

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/vstimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/vstimage-png.png)

<p class="callout info">**Info** : l'erreur de confidentialité viens du fait que le certificat est auto-signé.</p>

Si l'on affiche le certificat :

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/SD6image-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/SD6image-png.png)

<details id="bkmrk-facultatif---optimis"><summary>Facultatif - optimisation de sécurité</summary>

Ajouter également dans le fichier "<span style="color: rgb(132,63,161);">***default-ssl.conf***</span>" les lignes suivantes pour corriger les failles du protocole SSL :

```
SSLProtocol -ALL +TLSv1 +TLSv1.1 +TLSv1.2
SSLHonorCipherOrder On
SSLCipherSuite ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:HIGH:!MD5:!aNULL:!EDH:!RC4
SSLCompression off
```

</details>---

### <span style="color: rgb(52,73,94);">**<span style="text-decoration: underline;">IV. Redirection HTTP vers HTTPS</span>**</span>

Pour terminer la configuration, trois solutions sont possibles.

1. Laisser tel quel et offrir la possibilité de choisir entre le http et le https.
2. Couper le service http si l'on ne l'estime plus nécessaire.
3. Rediriger l'utilisateur vers le https automatiquement si il tente une connexion en http.

Dans le premiers cas rien de plus n'est à faire. Sinon :

<details id="bkmrk-d%C3%A9sativer-http-%C2%A0"><summary>Désativer HTTP</summary>

Désactiver le site HTTP par défaut :

```
a2dissite 000-default.conf
```

Couper le port d'écoute 80 en éditant le fichier "<span style="color: rgb(132,63,161);">***/etc/apache2/ports.conf***</span>" et en commentant la ligne suivante :

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/uVPimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/uVPimage-png.png)

Sauvegarder, quitter.

Puis relancer le service apache.

```
service apache2 restart
```

Le serveur web n'écoute plus les communications sur le port 80.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/XBHimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/XBHimage-png.png)

</details><details id="bkmrk-rediriger-http---%3E-h"><summary>Rediriger HTTP --&gt; HTTPS</summary>

Activer le module url rewriting (celui-ci permet au serveur de réécrire les url).

```bash
a2enmod rewrite
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/kqVimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/kqVimage-png.png)

Désactiver le site HTTP par défaut :

```
a2dissite 000-default.conf
```

Remplacer le fichier "<span style="color: rgb(132,63,161);">***000-default.conf***</span>" par un autre fichier appelé par exemple "<span style="color: rgb(132,63,161);">***default-http.conf***</span>"

```
cd /etc/apache2/sites-available/
mv 000-default.conf 000-default.conf.bkp && touch default-http.conf
```

Editer le fichier créé "<span style="color: rgb(132,63,161);">***default-http.conf***</span>" et écrire ce qui suit :

```html
<VirtualHost *:80>
ServerName ste-lab-dmi01.mfrstegreve.fr
ServerAlias ste-lab-dmi01.mfrstegreve.fr

RewriteEngine On

Redirect permanent / https://ste-lab-dmi01.mfrstegreve.fr?

</VirtualHost>
```

</details>