Aller au contenu

Des certificats SSL auto-signés avec mkcert

logo

Dans tous les projets que je vais utiliser dans mon Home Lab Devops je vais avoir besoin d’activer la partie SSL. Pour cela je vais avoir besoin de certificats. Je ne vais pas en acheter auprès d’une autorité de certification, car je ne vais rien exposer publiquement.

Je pourrais utiliser openssl, mais ça me fatigue d’avance. C’est là qu’intervient mkcert. mkcert est un outil facile d’utilisation qui va se charger de tout. Il génère notre autorité de certification, qui servira à signer le(s) certificat(s). Il suffira de déployer sa clé sur toutes les machines clientes pour que nous n’ayons aucune erreur du type “self signed…”

Installation de mkcert

On va utiliser asdf que je nomme le maxi choco du Devops :

Terminal window
asdf plugin add mkcert https://github.com/salasrod/asdf-mkcert.git
asdf install mkcert latest
asdf global mkcert latest

Génération du CA

Une simple commande va générer notre nouvelle autorité de certification, sans saisir une seule information.

Terminal window
mkcert -install

Le certificat sera généré dans un répertoire, que vous pouvez localiser avec la commande :

Terminal window
mkcert -CAROOT
/home/vagrant/.local/share/mkcert

Affichons le contenu :

Terminal window
ls -l /home/vagrant/.local/share/mkcert
total 8
-r-------- 1 vagrant vagrant 2488 févr. 14 15:54 rootCA-key.pem
-rw-r--r-- 1 vagrant vagrant 1635 févr. 14 15:54 rootCA.pem

Génération d’un certificat

Maintenant que nous avons notre CA, nous allons générer notre certificat.

Terminal window
mkcert 'artefacts.robert.local' localhost 127.0.0.1 ::1
Created a new certificate valid for the following names
- "artefacts.robert.local"
- "localhost"
- "127.0.0.1"
- "::1"

Le certificat se retrouve dans le dossier où vous avez exécuté la commande mkcert. On se retrouve avec deux fichiers :

Terminal window
ls -l
total 8
-rw------- 1 vagrant vagrant 1704 févr. 16 09:04 artefacts.robert.local+4-key.pem # ssl_certificate_key
-rw-r--r-- 1 vagrant vagrant 1549 févr. 16 09:04 artefacts.robert.local+4.pem # ssl_certificate

Test de la clé

On va simplement installer nginx, sur notre machine et le configurer avec notre clé (remplacer les noms des fichiers du certificat avec les vôtres)

Terminal window
sudo su
apt install -y nginx
cp artefacts.robert.local+4.pem /etc/ssl/certs
cp artefacts.robert.local+4-key.pem /etc/ssl/private
cat <<EOF >>/etc/nginx/conf.d/artefacts.conf
server {
listen 80;
server_name artefacts.robert.local;
return 301 https://$server_name$request_uri;
root /var/www/html;
}
server {
listen *:443 ssl http2;
server_name artefacts.robert.local;
ssl_certificate /etc/ssl/certs/artefacts.robert.local+4.pem;
ssl_certificate_key /etc/ssl/private/artefacts.robert.local+4-key.pem;
root /var/www/html;
}
EOF
echo 127.0.0.1 artefacts.robert.local>>/etc/hosts
echo Test >>/var/www/html/index.html

On teste :

Terminal window
curl https://artefacts.robert.local
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

Normal, nous n’avons pas ajouté autorité de certifications.

Installation de la clé de l’autorité de certification sur toutes les machines

Sur les machines linux

Sur les machines de type Debian :

Terminal window
sudo cp ~/.local/share/mkcert/rootCA.pem /usr/local/share/ca-certificates/rootCA.crt
sudo apt install -y ca-certificates
sudo update-ca-certificates
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

Sur les machines de type Redhat :

Terminal window
sudo cp ~/.local/share/mkcert/rootCA.pem /etc/pki/ca-trust/source/anchors/rootCA.crt
sudo dnf install -y ca-certificates
sudo update-ca-trust

On teste :

Terminal window
curl https://artefacts.robert.local
Test

Cool

Pour les machines windows

Il faut convertir le certificat :

Terminal window
openssl pkcs12 -inkey rootCA-key.pem -in rootCA.pem -export -out myrootCA.pfx
Enter Export Password:
Verifying - Enter Export Password:

Copiez le fichier myrootCA.pfx sur votre machine Windows. Touche [windows], certificat mkcert certificat windows

Allez dans le répertoire Autorités de certification racines de confiance/Certificats. Puis clique droit, Toutes les taches > Importer Sélectionner le fichier myrootCA.pfx. Entrez le mdp si besoin

mkcert certificat windows

On teste :

mkcert certificat windows

Cool. Et voilà, ça, c’est fait ! Nous allons pouvoir utiliser ces certificats sur notre gestionnaire d’artefacts et bien d’autres outils de notre Home Lab Devops. La suite d’ici peu.