Guide de Configuration de Certificat SSL : Sécuriser Votre Homelab
Aperçu
Cette référence fournit des modèles rapides pour l'implémentation de certificats SSL/TLS dans les environnements homelab, couvrant à la fois les autorités de certification publiques et privées.
Comparaison des Types de Certificats
| Type | Confiance | Renouvellement | Coût | Cas d'utilisation |
|---|---|---|---|---|
| Let’s Encrypt | Publique | 90 jours (automatique) | Gratuit | Domaines publics |
| Self-Signed | Aucune | Manuel | Gratuit | Test uniquement |
| mkcert | AC Locale | Manuel | Gratuit | Services internes |
| Cloudflare Origin | Cloudflare | 15 ans | Gratuit | Sites derrière proxy Cloudflare |
Méthode 1 : Let’s Encrypt (Défi DNS)
Quand l'utiliser
- Domaine public avec DNS Cloudflare
- Services derrière un pare-feu (pas de port 80 exposé)
- Renouvellement automatique requis
Configuration
# Install certbot
sudo apt install certbot python3-certbot-dns-cloudflare
# Create Cloudflare credentials
nano ~/.secrets/cloudflare.inidns_cloudflare_api_token = YOUR_CLOUDFLARE_API_TOKEN# Obtain certificate
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials ~/.secrets/cloudflare.ini \
-d proxmox.yourdomain.com \
-d '*.yourdomain.com'
# Certificates saved to:
# /etc/letsencrypt/live/yourdomain.com/fullchain.pem
# /etc/letsencrypt/live/yourdomain.com/privkey.pemMéthode 2 : mkcert (AC Locale)
Quand l'utiliser
- Services internes (LAN uniquement)
- Environnement de développement
- Plusieurs appareils doivent faire confiance
Installation
# Install mkcert
sudo apt install libnss3-tools
wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64
sudo mv mkcert-v1.4.4-linux-amd64 /usr/local/bin/mkcert
sudo chmod +x /usr/local/bin/mkcert
# Install local CA
mkcert -install
# Generate certificate
mkcert proxmox.lab "*.lab.local" localhost 127.0.0.1 ::1
# Output:
# proxmox.lab+4.pem (certificate)
# proxmox.lab+4-key.pem (private key)Installation Côté Client
# Exporter le certificat de l'AC
cp "$(mkcert -CAROOT)/rootCA.pem" ~/ca-cert.pem
# Installer sur d'autres appareils :
# - Windows : Importer dans les autorités de certification racines de confiance
# - Linux : Copier vers /usr/local/share/ca-certificates/
# - Android : Paramètres → Sécurité → Installer depuis le stockageMéthode 3 : Intégration avec Nginx Proxy Manager
Let’s Encrypt via NPM
Dans l'interface utilisateur de NPM :
Hôte Proxy → Onglet SSL
- Demander un nouveau certificat SSL
- Utiliser le Défi DNS
- Fournisseur DNS : Cloudflare
- Jeton API : [votre jeton]
- Forcer SSL : ACTIVÉ
- HTTP/2 : ACTIVÉ
- HSTS : ACTIVÉ
Certificat Personnalisé via NPM
Importer le certificat mkcert :
Certificats SSL → Ajouter un certificat SSL → Personnalisé
- Clé de Certificat : Téléverser privkey.pem
- Certificat : Téléverser fullchain.pem
Méthode 4 : ACME Proxmox
Configuration dans Proxmox
Datacenter → ACME
1. Ajouter un compte : Let's Encrypt (Production)
2. Ajouter un plugin de défi :
- ID du Plugin : cloudflare
- API DNS : Cloudflare Managed DNS
- Jeton CF : [votre jeton API]
Nœud → Système → Certificats
1. Ajouter : Utilisation d'ACME
2. Domaine : proxmox.yourdomain.com
3. Type de Défi : DNS
4. Plugin : cloudflare
5. Commander le Certificat Maintenant
Automatisation du Renouvellement de Certificat
Renouvellement Automatique Let’s Encrypt
# Test renewal
sudo certbot renew --dry-run
# Auto-renewal is configured via systemd timer
sudo systemctl status certbot.timerScript de Renouvellement Personnalisé
#!/bin/bash
# renew-certs.sh
# Renew Let's Encrypt
certbot renew --quiet
# Reload services
systemctl reload nginx
systemctl reload pveproxy
# Send notification
echo "Certificates renewed successfully" | \
mail -s "Certificate Renewal" admin@example.comTâche Cron
# Add to crontab
crontab -e
# Run weekly
0 3 * * 0 /root/renew-certs.shDépannage
Certificat Non Reconnu
Problème : Le navigateur affiche l'avertissement « Non sécurisé »
Solutions :
# Verify certificate chain
openssl s_client -connect domain.com:443 -showcerts
# Check CA installation (mkcert)
mkcert -CAROOT
# Reinstall CA
mkcert -uninstall
mkcert -installLe Défi DNS Échoue
Problème : Let’s Encrypt ne peut pas valider le domaine
Solutions :
# Verify DNS propagation
dig _acme-challenge.yourdomain.com TXT
# Check API token permissions
# Must have: Zone.DNS.Edit
# Test with verbose output
certbot certonly --dns-cloudflare --dry-run -vCertificat Expiré
Problème : Le service utilise un certificat expiré
Solutions :
# Check expiry date
openssl x509 -in /path/to/cert.pem -noout -dates
# Force renewal
certbot renew --force-renewal
# Reload service
systemctl reload nginxMeilleures Pratiques de Sécurité
1. Configuration Robuste
# Nginx SSL configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000" always;
2. Surveillance des Certificats
# Monitor expiry
openssl x509 -in cert.pem -noout -enddate
# Alert before expiry (30 days)
EXPIRY=$(openssl x509 -enddate -noout -in cert.pem | cut -d= -f2)
EXPIRY_EPOCH=$(date -d "$EXPIRY" +%s)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( ($EXPIRY_EPOCH - $NOW_EPOCH) / 86400 ))
if [ $DAYS_LEFT -lt 30 ]; then
echo "Certificate expires in $DAYS_LEFT days!" | \
mail -s "CERT EXPIRY WARNING" admin@example.com
fi3. Audits Réguliers
# Check all certificates
for cert in /etc/letsencrypt/live/*/cert.pem; do
echo "Certificate: $cert"
openssl x509 -in "$cert" -noout -subject -dates
echo "---"
doneGuide de Décision Rapide
Besoin d'un accès public ? → Utilisez Let’s Encrypt avec le défi DNS
Uniquement accès interne ? → Utilisez mkcert pour une AC locale
Test/développement ? → Auto-signé acceptable (mais mkcert est préféré)
Utilisez-vous Cloudflare ? → Certificat Cloudflare Origin ou Let’s Encrypt
Plusieurs services ? → Certificat Wildcard
(*.yourdomain.com)
Conclusion
Une configuration SSL/TLS appropriée est essentielle pour la sécurité du homelab. Choisissez la méthode de certificat en fonction de vos besoins d'accès et des capacités de votre infrastructure. Automatisez le renouvellement pour éviter les pannes liées à l'expiration.
Points Clés : - Utilisez toujours HTTPS pour les interfaces web - Automatisez le renouvellement des certificats - Surveillez l'expiration des certificats - Utilisez des configurations TLS robustes - Documentez votre infrastructure de certificats
Pour les détails d'implémentation, consultez les articles connexes sur Nginx Proxy Manager et Cloudflare Tunnel.