Vous êtes sur la page 1sur 8

LAB 2 : créer un certificat SSL auto-signé

pour

Introduction

TLS, ou “transport layer security” - et son prédécesseur SSL - sont des protocoles
utilisés pour envelopper le trafic normal dans une enveloppe protégée et cryptée. Grâce
à cette technologie, les serveurs peuvent envoyer en toute sécurité des informations à
leurs clients sans que leurs messages soient interceptés ou lus par une partie
extérieure.

Dans ce guide, nous vous montrerons comment créer et utiliser un certificat SSL auto-
signé avec le serveur web Apache sur Ubuntu 20.04.

Note : un certificat auto-signé cryptera la communication entre votre serveur et les


clients éventuels. Cependant, comme il n’est signé par aucune des autorités de
certification de confiance incluses avec les navigateurs web et les systèmes
d’exploitation, les utilisateurs ne peuvent pas utiliser le certificat pour valider
automatiquement l’identité de votre serveur. Par conséquent, vos utilisateurs verront
une erreur de sécurité lorsqu’ils visiteront votre site.

En raison de cette limitation, les certificats auto-signés ne sont pas appropriés pour un
environnement de production destiné au public. Ils sont généralement utilisés pour les
tests ou pour sécuriser des services non critiques utilisés par un seul utilisateur ou un
petit groupe d’utilisateurs qui peuvent établir la confiance dans la validité du certificat par
d’autres canaux de communication.

Pour une solution de certificat plus adaptée à la production, consultez Let’s Encrypt, une
autorité de certification gratuite. Vous pouvez apprendre comment télécharger et
configurer un certificat Let’s Encrypt dans notre tutoriel Comment sécuriser Apache avec
Let’s Encrypt sur Ubuntu 20.04.

Conditions préalables
Avant de commencer ce TP, vous aurez besoin des éléments suivants :
• Vous devrez avoir installé Apache. Vous pouvez installer Apache en
utilisant apt. Tout d’abord, mettez à jour l’index local des paquets afin de
refléter les derniers changements en amont :

1. sudo apt update


2.

Ensuite, installez le paquet apache2 :

1. sudo apt install apache2


2.

Enfin, si vous avez installé un pare-feu ufw, ouvrez les ports http et https :

1. sudo ufw allow "Apache Full"


2.

Une fois ces étapes terminées, assurez-vous que vous êtes connecté en tant que
non- root user et poursuivez le tutoriel.

Étape 1 — Activation de mod_ssl


Pour pouvoir utiliser un certificat SSL quel qu’il soit, nous devons d’abord
activer mod_ssl, un module Apache qui prend en charge le cryptage SSL.

Activez mod_ssl à l’aide de la commande a2enmod :

1. sudo a2enmod ssl


2.

Redémarrez Apache pour activer le module :

1. sudo systemctl restart apache2


2.

Le module mod_ssl est maintenant activé et prêt à l’emploi.

Étape 2 – Création du certificat SSL


Maintenant qu’Apache est prêt à utiliser le cryptage, nous pouvons passer à la
génération d’un nouveau certificat SSL. Le certificat stockera quelques informations de
base sur votre site, et sera accompagné d’un fichier clé qui permet au serveur de traiter
les données cryptées en toute sécurité.

Nous pouvons créer les fichiers de clés et de certificats SSL avec la commande openssl :

1. sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-
selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
2.

Après avoir entré la commande, vous serez amené à une invite où vous pourrez entrer
des informations sur votre site web. Avant d’en parler, voyons ce qui se passe dans la
commande que nous donnons :

• openssl : c’est l’outil de ligne de commande utilisé pour la création et la


gestion des certificats, clés et autres fichiers OpenSSL.
• req -x509 : cela spécifie que nous voulons utiliser la gestion des
demandes de signature de certificats (CSR) X.509. X.509 est une norme
d’infrastructure de clé publique à laquelle SSL et TLS adhèrent pour la
gestion des clés et des certificats.
• -nodes : cela indique à OpenSSL de ne pas utiliser l’option de
sécurisation de notre certificat par une phrase de passe. Nous avons
besoin qu’Apache soit capable de lire le fichier, sans intervention de
l’utilisateur, au démarrage du serveur. Une phrase de passe
empêcherait que cela se produise, puisque nous devrions la saisir après
chaque redémarrage.
• -days 365 : cette option fixe la durée pendant laquelle le certificat sera
considéré comme valide. Ici, nous l’avons fixée pour un an. De
nombreux navigateurs modernes refusent les certificats dont la durée de
validité dépasse un an.
• -newkey rsa:2048 : cette option précise que nous voulons générer un
nouveau certificat et une nouvelle clé en même temps. Nous n’avons
pas créé la clé nécessaire pour signer le certificat lors d’une étape
précédente, nous devons donc la créer en même temps que le certificat.
La partie rsa:2048 lui demande de fabriquer une clé RSA de 2048 bits.
• -keyout : cette ligne indique à OpenSSL où placer le fichier de clé privée
généré que nous créons.
• -out : cela indique à OpenSSL où placer le certificat que nous créons.

Remplissez les invites de manière appropriée. La ligne la plus importante est celle qui
demande le Common Name (nom commun). Vous devez entrer soit le nom d’hôte que
vous utiliserez pour accéder au serveur, soit l’adresse IP publique du serveur. Il est
important que ce champ corresponde à ce que vous allez mettre dans la barre
d’adresse de votre navigateur pour accéder au site, car une mauvaise correspondance
entraînera davantage d’erreurs de sécurité.

La liste complète des invites ressemblera à ceci :

Country Name (2 letter code) [XX]:US

State or Province Name (full name) []:Example

Locality Name (eg, city) [Default City]:Example

Organization Name (eg, company) [Default Company Ltd]:Example Inc

Organizational Unit Name (eg, section) []:Example Dept

Common Name (eg, your name or your server's hostname) []:your_domain_or_ip

Email Address []:webmaster@example.com

Les deux fichiers que vous avez créés seront placés dans les sous-répertoires
appropriés sous /etc/ssl.

Ensuite, nous mettrons à jour notre configuration Apache pour utiliser le nouveau
certificat et la nouvelle clé.

Étape 3 – Configuration d’Apache pour utiliser SSL


Maintenant que nous disposons de notre certificat et de notre clé auto-signés, nous
devons mettre à jour notre configuration Apache pour pouvoir les utiliser. Sur Ubuntu,
vous pouvez placer de nouveaux fichiers de configuration Apache (ils doivent se
terminer par .conf) dans /etc/apache2/sites-available/ et ils seront chargés la prochaine fois
que le processus Apache sera rechargé ou redémarré.

Pour ce tutoriel, nous allons créer un nouveau fichier de configuration minimale. (Si vous
avez déjà configuré Apache <Virtualhost> et que vous devez juste y ajouter SSL, vous
devrez probablement copier les lignes de configuration qui commencent par SSL, et
changer le port du VirtualHost de 80 à 443. Nous nous occuperons du port 80 dans la
prochaine étape).

Ouvrez un nouveau fichier dans le répertoire /etc/apache2/sites-available :


1. sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf
2.

Collez-y la configuration minimale suivante de VirtualHost :

/etc/apache2/sites-available/your_domain_or_ip.conf
<VirtualHost *:443>

ServerName your_domain_or_ip

DocumentRoot /var/www/your_domain_or_ip

SSLEngine on

SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt

SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key

</VirtualHost>

Veillez à mettre à jour la ligne ServerName en fonction de la manière dont vous avez
l’intention de nommer votre serveur. Il peut s’agir d’un nom d’hôte, d’un nom de domaine
complet ou d’une adresse IP. Assurez-vous que ce que vous choisissez correspond
au Common Name (nom commun) que vous avez choisi lors de l’établissement du
certificat.

Les lignes restantes indiquent un répertoire DocumentRoot à partir duquel les fichiers
seront servis, ainsi que les options SSL nécessaires pour faire pointer Apache vers
notre certificat et notre clé nouvellement créés.

Nous allons maintenant créer notre DocumentRoot et y insérer un fichier HTML à des fins
de test :

1. sudo mkdir /var/www/your_domain_or_ip


2.

Ouvrez un nouveau fichier index.html avec votre éditeur de texte :


1. sudo nano /var/www/your_domain_or_ip/index.html
2.

Collez ce qui suit dans le fichier vierge :

/var/www/your_domain_or_ip/index.html
<h1>it worked!</h1>

Ce n’est pas un fichier HTML complet, bien sûr, mais les navigateurs sont indulgents et
cela suffira pour vérifier notre configuration.

Enregistrez et fermez le fichier. Ensuite, nous devons activer le fichier de configuration


avec l’outil a2ensite :

1. sudo a2ensite your_domain_or_ip.conf


2.

Ensuite, effectuons un test à la recherche d’éventuelles erreurs de configuration :

1. sudo apache2ctl configtest


2.

Si tout fonctionne correctement, vous obtiendrez un résultat qui ressemble à ceci :

Output

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using
127.0.1.1. Set the 'ServerName' directive globally to suppress this message

Syntax OK

La première ligne est un message vous indiquant que la directive ServerName n’est pas
définie globalement. Si vous ne voulez plus voir ce message s’afficher, vous pouvez
définir ServerName en spécifiant le nom de domaine ou l’adresse IP de votre serveur
dans /etc/apache2/apache2.conf. Ceci est facultatif car le message ne fera pas de mal.

Si votre sortie contient Syntax OK, votre fichier de configuration ne contient aucune erreur
de syntaxe. Nous pouvons recharger Apache en toute sécurité pour que nos
modifications soient appliquées :

1. sudo systemctl reload apache2


2.

Chargez maintenant votre site dans un navigateur, en veillant à utiliser https:// au début.

Vous devriez voir une erreur. C’est normal pour un certificat auto-signé ! Le navigateur
vous avertit qu’il ne peut pas vérifier l’identité du serveur, car notre certificat n’est signé
par aucune de ses autorités de certification connues. Pour les tests et l’utilisation
personnelle, cela peut être très bien. Vous devriez pouvoir cliquer pour accéder à des
informations avancées ou complémentaires et choisir de poursuivre.

Une fois que vous l’aurez fait, votre navigateur chargera le message it worked! .

Remarque : si votre navigateur ne se connecte pas du tout au serveur, assurez-vous


que votre connexion n’est pas bloquée par un pare-feu. Si vous utilisez ufw, les
commandes suivantes ouvriront les ports 80 et 443 :

1. sudo ufw allow "Apache Full"


2.
Copy

Nous allons ensuite ajouter une autre section VirtualHost à notre configuration pour servir
les requêtes HTTP simples et les rediriger vers HTTPS.

Étape 4 — Redirection de HTTP vers HTTPS


Actuellement, notre configuration ne répondra qu’aux demandes HTTPS sur le port 443.
Il est bon de répondre également sur le port 80, même si vous voulez forcer le cryptage
de tout le trafic. Mettons en place un VirtualHost pour répondre à ces demandes non
cryptées et les rediriger vers le HTTPS.

Ouvrez le même fichier de configuration Apache que celui que nous avons lancé lors
des étapes précédentes :

1. sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf


2.

En bas, créez un autre bloc VirtualHost pour faire correspondre les demandes sur le
port 80. Utilisez la directive ServerName pour faire correspondre à nouveau votre nom de
domaine ou votre adresse IP. Ensuite, utilisez Redirect (Rediriger) pour faire
correspondre les requêtes et les envoyer au VirtualHost SSL. Veillez à inclure la barre
oblique :

/etc/apache2/sites-available/your_domain_or_ip.conf
<VirtualHost *:80>

ServerName your_domain_or_ip

Redirect / https://your_domain_or_ip/

</VirtualHost>

Enregistrez et fermez ce fichier lorsque vous avez terminé, puis testez à nouveau la
syntaxe de votre configuration, et rechargez Apache :

1. sudo apachectl configtest


2.
3. sudo systemctl reload apache2
4.
Copy

Vous pouvez tester la nouvelle fonctionnalité de redirection en visitant votre site avec le
simple http:// devant l’adresse. Vous devriez être redirigé automatiquement vers https://.

Conclusion
Vous avez maintenant configuré Apache pour servir des demandes cryptées en utilisant
un certificat SSL auto-signé, et pour rediriger les demandes HTTP non cryptées vers
HTTPS.

Si vous envisagez d’utiliser SSL pour un site web public, vous devriez envisager
d’acheter un nom de domaine et d’utiliser une autorité de certification largement
reconnue telle que Let’s Encrypt.

Vous aimerez peut-être aussi