Post

Générer des certificats SSL auto-signés avec mkcert

Générer des certificats SSL auto-signés avec mkcert

Texte alternatif

mkcert est un outil facile d’utilisation qui va se charger de tout. Il génère notre autorité de certification locale, 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

MKCert est disponible dans les dépôts officiels de la plupart des distributions Linux

1
2
3
sudo pacman -S mkcert                # archlinux
sudo apt install mkcert              # debian
sudo apk add mkcert                  # alpine linux

Générer autorité de certification CA

Pour que les certificats soient considérés comme valides, il faut que l’autorité de certification soit ajoutée au système de confiance (trust-store) de notre hôte.

1
mkcert -install
1
2
3
4
5
Created a new local CA 💥
The local CA is now installed in the system trust store! ⚡️

# si déjà effectué
The local CA is already installed in the system trust store! 👍

Il est possible de copier notre CA pour l’ajouter sur d’autres machines (pour que les certificats soient considérés comme valides par ces machines).

1
mkcert -CAROOT 

Renvoie

1
/home/bookvm/.local/share/mkcert

Affichons le contenu :

1
2
3
4
ls -l /home/bookvm/.local/share/mkcert
total 8
-r-------- 1 bookvm bookvm 2484 Nov 18 19:25 rootCA-key.pem
-rw-r--r-- 1 bookvm bookvm 1643 Nov 18 19:25 rootCA.pem

Pour vérifier l’autorité de certification AC

1
openssl x509 -noout -text -in /home/bookvm/.local/share/mkcert/rootCA.pem 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            5b:97:fc:a2:92:63:65:59:48:10:90:e8:64:24:49:cb
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: O = mkcert development CA, OU = bookvm@vm-debian12, CN = mkcert bookvm@vm-debian12
        Validity
            Not Before: Nov 18 19:25:03 2023 GMT
            Not After : Nov 18 19:25:03 2033 GMT
        Subject: O = mkcert development CA, OU = bookvm@vm-debian12, CN = mkcert bookvm@vm-debian12
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (3072 bit)

La clé publique de cette autorité de certification doit être ajoutée sur les machines (pour que celle-ci accepte les certificats signés par cette autorité).

pour une machine distante

1
2
scp $(mkcert -CAROOT)/rootCA.pem vm-debian.fr:/usr/local/share/ca-certificates/mkcert.crt
ssh vm-debian.fr sudo update-ca-certificates
1
2
3
4
5
Updating certificates in /etc/ssl/private...
rehash: warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

Génération d’un certificat

Sur la machine locale (ayant généré l’autorité de certification)

1
mkcert -cert-file bookvm.loc.crt -key-file bookvm.loc.key bookvm.loc fmy.bookvm.loc gpx.bookvm.loc iptv.bookvm.loc rss.bookvm.loc static.bookvm.loc test.bookvm.loc traduction.bookvm.loc

Résultat

1
2
3
4
5
6
7
8
9
10
11
12
13
Created a new certificate valid for the following names 📜
 - "bookvm.loc"
 - "fmy.bookvm.loc"
 - "gpx.bookvm.loc"
 - "iptv.bookvm.loc"
 - "rss.bookvm.loc"
 - "static.bookvm.loc"
 - "test.bookvm.loc"
 - "traduction.bookvm.loc"

The certificate is at "bookvm.loc.crt" and the key at "bookvm.loc.key" ✅

It will expire on 21 May 2026 🗓

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

1
2
3
ls -l bookvm*
-rw-r--r-- 1 bookvm bookvm 1700 Feb 21 17:07 bookvm.loc.crt
-rw------- 1 bookvm bookvm 1704 Feb 21 17:07 bookvm.loc.key

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)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
sudo su
apt install -y nginx
cp bookvm.loc.crt /etc/ssl/private
cp bookvm.loc.key /etc/ssl/private

cat <<EOF >>/etc/nginx/conf.d/bookvm.loc.conf
server {
  listen  80;
  server_name bookvm.loc;
  return 301 https://$server_name$request_uri;
  root /var/www/html;
}
server {
  listen *:443 ssl http2;
  server_name bookvm.loc;
  ssl_certificate /etc/ssl/private/bookvm.loc.crt;
  ssl_certificate_key /etc/ssl/private/bookvm.loc.key;
  root /var/www/html;
}
EOF

echo "127.0.0.1 bookvm.loc.key bookvm.loc fmy.bookvm.loc gpx.bookvm.loc iptv.bookvm.loc rss.bookvm.loc static.bookvm.loc test.bookvm.loc traduction.bookvm.loc" >> /etc/hosts
echo Test >> /var/www/html/test.html

On teste :

1
curl -I https://bookvm.loc/index.html
1
2
3
4
5
6
7
8
HTTP/2 200 
server: nginx/1.24.0
date: Wed, 21 Feb 2024 17:39:39 GMT 00:00:00 +0100
content-type: text/html
content-length: 7086
last-modified: Mon, 04 Dec 2023 15:16:35 GMT
etag: "656ded53-1bae"
accept-ranges: bytes

Pas d’erreur, le chiffrement est bien en place !

Diffuser sa chaîne d’authentification

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

Sur les machines de type Archlinux

1
2
3
sudo cp ~/.local/share/mkcert/rootCA.pem /etc/ca-certificates/trust-source/anchors/rootCA.crt
# Faites de même avec tous les fichiers /etc/ssl/private/*.pem ajoutés manuellement et renommez-les en *.crt
sudo  trust extract-compat

Sur les machines de type Debian

1
2
3
4
5
6
7
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/private...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

Sur les machines de type Redhat

1
2
3
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 :

1
2
curl https://bookvm.loc
Test
Cet article est sous licence CC BY 4.0 par l'auteur.