Créer une CA locale et gérer ses certificats SSL
CA locale vs certificat auto-signé
⚠️ Certificat auto-signé
Un certificat auto-signé est généré et signé par lui-même, sans autorité de confiance. Le navigateur affiche un avertissement à chaque accès. C'est rapide mais peu pratique dès qu'on a plusieurs services.
✅ CA locale (recommandée)
On crée une autorité de certification locale. On l'installe une seule fois dans Windows comme autorité de confiance — tous les certificats qu'elle signe seront automatiquement approuvés par les navigateurs, sans avertissement.
1. Structure de dossiers
sudo mkdir -p /opt/ssl/{current,requests,config,archive}# current : accessible en lecture (Traefik y accède)
sudo chmod 755 /opt/ssl/current/
# config : lisible par tous
sudo chmod 755 /opt/ssl/config/
# requests et archive : contiennent des clés privées
sudo chmod 700 /opt/ssl/requests/
sudo chmod 700 /opt/ssl/archive/Ces dossiers contiennent les clés privées. Si un attaquant y accède, il peut déchiffrer tout le trafic HTTPS. 700 signifie que seul le propriétaire peut lire, écrire et accéder à ces dossiers.
Vérification : ls -la /opt/ssl/
2. Fichier de configuration SSL
sudo nano /opt/ssl/config/ssl_cert.conf[req]
default_bits = 2048
prompt = no
distinguished_name = req_distinguished_name
req_extensions = v3_req
[req_distinguished_name]
C=FR
ST=HDF
L=Lille
O=Ignis Fox
OU=Ignis
CN=docker-ignis
[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = traefik.ignis.fr
DNS.2 = ignis-fox.frLes navigateurs modernes ignorent le champ CN pour valider le domaine — ils ne regardent que les alt_names. Ajoutez ici tous vos domaines (DNS.3, DNS.4, etc.).
3. Création de la CA locale
3.1 Générer la clé privée de la CA
sudo openssl genrsa -out /opt/ssl/archive/ca.key 4096On utilise 4096 bits pour la CA car sa clé signe tous les autres certificats. Elle mérite d'être plus robuste que les certificats serveur (2048 bits suffisent pour ces derniers).
3.2 Générer le certificat racine de la CA
sudo openssl req -new -x509 -days 3650 \
-key /opt/ssl/archive/ca.key \
-out /opt/ssl/archive/ca.crt \
-subj "/C=FR/ST=HDF/L=Lille/O=Ignis Fox/OU=Ignis/CN=Ignis-CA"3650 jours (10 ans) est raisonnable pour une CA locale. Cette limitation de durée ne s'applique pas aux CA — seuls les certificats serveur sont limités à 825 jours.
Vérification : openssl x509 -in /opt/ssl/archive/ca.crt -text -noout | grep -E "Issuer|Not"
4. Génération du certificat serveur
4.1 Clé privée serveur
sudo openssl genrsa -out /opt/ssl/archive/docker-ignis.key 20484.2 Demande de signature (CSR)
sudo openssl req -new \
-key /opt/ssl/archive/docker-ignis.key \
-out /opt/ssl/requests/docker-ignis.csr \
-config /opt/ssl/config/ssl_cert.conf4.3 Signer avec la CA
sudo openssl x509 -req -days 825 \
-in /opt/ssl/requests/docker-ignis.csr \
-CA /opt/ssl/archive/ca.crt \
-CAkey /opt/ssl/archive/ca.key \
-CAcreateserial \
-out /opt/ssl/archive/docker-ignis.crt \
-extensions v3_req \
-extfile /opt/ssl/config/ssl_cert.confLes navigateurs modernes refusent les certificats serveur valables plus de 825 jours. Ne dépassez pas cette limite, même si openssl l'accepte.
5. Déploiement dans current/
sudo cp /opt/ssl/archive/docker-ignis.crt /opt/ssl/current/
sudo cp /opt/ssl/archive/docker-ignis.key /opt/ssl/current/6. Récupérer la CA vers Windows
Option 1 — Copier sur le bureau
cp /opt/ssl/archive/ca.crt /mnt/c/Users/<VotreUser>/Desktop/ca.crtOption 2 — Via l'explorateur Windows
Dans la barre d'adresse de l'explorateur, tapez :
\\wsl$\Debian\opt\ssl\archiveOption 3 — Via PowerShell
cp \\wsl$\Debian\opt\ssl\archive\ca.crt $env:USERPROFILE\Desktop\ca.crt7. Installer la CA dans Windows
Via l'interface graphique
- Double-clic sur
ca.crt - Cliquer sur Installer le certificat
- Sélectionner Machine locale
- Choisir Placer tous les certificats dans le magasin suivant
- Parcourir → Autorités de certification racines de confiance
- Terminer
Via PowerShell (en administrateur)
Import-Certificate -FilePath "$env:USERPROFILE\Desktop\ca.crt" -CertStoreLocation Cert:\LocalMachine\RootFirefox a son propre magasin de certificats et n'utilise pas celui de Windows. Paramètres → Confidentialité et sécurité → Certificats → Voir les certificats → Autorités → Importer.
8. Renouvellement
Quand un certificat approche des 825 jours, régénérez-le sans toucher à la CA :
sudo openssl genrsa -out /opt/ssl/archive/docker-ignis.key 2048
sudo openssl req -new \
-key /opt/ssl/archive/docker-ignis.key \
-out /opt/ssl/requests/docker-ignis.csr \
-config /opt/ssl/config/ssl_cert.conf
sudo openssl x509 -req -days 825 \
-in /opt/ssl/requests/docker-ignis.csr \
-CA /opt/ssl/archive/ca.crt \
-CAkey /opt/ssl/archive/ca.key \
-CAcreateserial \
-out /opt/ssl/archive/docker-ignis.crt \
-extensions v3_req \
-extfile /opt/ssl/config/ssl_cert.conf
sudo cp /opt/ssl/archive/docker-ignis.crt /opt/ssl/current/
sudo cp /opt/ssl/archive/docker-ignis.key /opt/ssl/current/Commandes utiles
# Vérifier la date d'expiration
openssl x509 -in /opt/ssl/current/docker-ignis.crt -noout -dates
# Vérifier qu'un certificat est bien signé par la CA
openssl verify -CAfile /opt/ssl/archive/ca.crt /opt/ssl/current/docker-ignis.crt
# Voir tous les détails
openssl x509 -in /opt/ssl/current/docker-ignis.crt -text -noout
# Vérifier que la clé correspond au certificat (les deux hash doivent être identiques)
openssl x509 -noout -modulus -in /opt/ssl/current/docker-ignis.crt | md5sum
openssl rsa -noout -modulus -in /opt/ssl/current/docker-ignis.key | md5sum
# Lister les certificats Ignis dans Windows (PowerShell)
Get-ChildItem Cert:\LocalMachine\Root | Where-Object { $_.Subject -like "*Ignis*" }Erreurs fréquentes
| Erreur | Cause | Solution |
|---|---|---|
unable to load CA Private Key | Mauvais chemin ou permissions | Vérifier le chemin et sudo chmod 600 ca.key |
| Navigateur affiche un avertissement | CA pas installée ou mauvais magasin | Vérifier dans "Autorités de certification racines de confiance" |
certificate has expired | Certificat dépassé les 825 jours | Renouveler (section 8) |
| Firefox ne fait pas confiance | Firefox a son propre magasin | Importer manuellement dans les paramètres Firefox |
| SAN manquants | alt_names absents | Vérifier ssl_cert.conf et régénérer le CSR |