Publié le : 21/04/2021
Comment créer un certificat SSL de confiance sur votre machine de développement local et l’utiliser sur un serveur Apache sous Ubuntu 20.04
Aujourd’hui quand vous faites du développement d’application web, mobile, de bureau et autres il est primordial de mettre en place une couche de la sécurité qui est le certificat SSL. Et quand vous passez au développement de ces applications, il faut déjà implémenter cette sécurité pour voir si l’application fonctionne correctement avec les exigences engendrées par la sécurité.
Ainsi quand vous allez développer les applications sur votre machine de travail, il faut déjà mettre en place le certificat SSL. Pour ce faire, mkcert nous permet de créer un certificat de confiance . C’est un outil « zero-config ». Il crée et installe automatiquement un « certificate authorities » (CA) local dans votre machine et génère des certificats de confiance local.
En utilisant des certificats à partir des CAs pour votre machine local (localhost ou 127.0.0.1) de développement peut être dangereux voir impossible, et que l’utilisation des certificats auto-signés provoque des erreur de confiance. De plus, en gérant vos propres CA est la meilleure solution, mais il est nécessaire d’avoir des connaissances poussés dans la mise en place de CA et l’utilisation de divers commandes manuels, qui est totalement difficile et fastidieux que ce que propose l’outil mkcert.
Installation de certutil
Avant de pouvoir installer mkcert, il est nécessaire d’installer certutil. C’est un utilitaire de ligne de commande qui peut créer et modifier les certificats et les bases de données des clés.
La commande pour le faire est :
# apt install libnss3-tools
Installation de mkcert pour la génération d’un certificat SSL
Une fois l’installation de certutil effectuée, on peut téléchager le fichier binaire de mkcert sur Github et l’installer par les commandes ci-dessous :
# wget wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64
# mv mkcert-v1.1.2-linux-amd64 mkcert
# chmod +x mkcert
# cp mkcert /usr/local/bin/
Génération des CA locales
Après l’installation de l’outil mkcert, on va générer le CA local avec la commande ci-dessous :
mkcert -install
Nous obtiendrons par la suite le résultat suivant qui nous dit que l’installation est faites et qu’il faut redémarrer les navigateurs.
Created a new local CA at "/home/noel/.local/share/mkcert" ?
The local CA is now installed in the system trust store! ⚡️
The local CA is now installed in the Firefox and/or Chrome/Chromium trust store (requires browser restart)! ?
Pour regarder l’emplacement du « root CA », on exécute la commande :
mkcert -CAROOT
Cette commande nous donne le chemin du « root CA ».
En regardant dans Firefox par exemple dans les « Préférences », en recherchant « certificat », en cliquant sur le bouton « Afficher les certificats » et en allant dans l’onglet « Autorités », on peut voir notre CA « mkcert ».
Génération des certificats SSL local
Après l’installation du CA local, nous allons lancer l’exécution de la commande mkcert pour la génération des certificats locales.
# mkcert localhost 127.0.0.1 ::1
Une fois l’exécution terminée, on obtient :
Using the local CA at "/home/amos/.local/share/mkcert" ✨
Created a new certificate valid for the following names ?
- "localhost"
- "127.0.0.1"
- "::1"
The certificate is at "./localhost+2.pem" and the key at "./localhost+2-key.pem" ✅
Activation des certificats SSL dans Apache
Quand on obtient les certificats SSL, on peut configurer Apache pour prendre en compte ces certificats lors de votre requête https.
Pour ce faire, nous allons modifier le fichier 000-default.conf dans le répertoire /etc/apache2/sites-available/ et ajouter les lignes :
<VirtualHost *:80>
ServerAdmin admin@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/localhost+2.pem
SSLCertificateKeyFile /etc/apache2/ssl/localhost+2-key.pem
ServerAdmin admin@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Ensuite, nous allons activer SSL dans Apache en chargeant les modules ssl.
# a2enmod ssl
Enfin pour que la configuration soit prise en compte, il faut redémarrer apache avec la commande :
# systemctl restart apache