Skip to content
PasRP-Theo edited this page Jun 5, 2025 · 1 revision

Guide HTTPS avec Nginx : Certificats Auto-signés et Let's Encrypt

4.1 HTTPS avec un certificat auto-signé

4.1.1 Génération du certificat auto-signé avec OpenSSL

Étapes de création d'un certificat

Un certificat nécessite trois étapes :

  1. Créer une paire de clés cryptographiques (format .key)
  2. Générer une demande de certificat (format CSR)
  3. Signer le certificat (format CRT)

Création de la clé et du CSR

sudo openssl req -nodes -newkey rsa:4096 -keyout certificate/nginx-selfsigned.key -out certificate/nginx-selfsigned.csr

Options expliquées :

  • req : demande de certificat (CSR)
  • nodes : ne pas chiffrer la clé privée avec DES
  • newkey : créer une nouvelle clé
  • keyout : nom du fichier pour la clé
  • out : fichier contenant la demande de certificat

⚠️ Important : Le FQDN doit correspondre à votre hôte (www.lx-y.ephec-ti.be)

Visualisation des clés et certificats

# Visualiser la clé privée
sudo openssl rsa -noout -text -in certificate/nginx-selfsigned.key

# Visualiser la demande de certificat
sudo openssl req -noout -text -in certificate/nginx-selfsigned.csr

Auto-signature du certificat

sudo openssl x509 -signkey certificate/nginx-selfsigned.key -in certificate/nginx-selfsigned.csr -req -days 365 -out certificate/nginx-selfsigned.crt

Visualisation du certificat final

openssl x509 -noout -text -in certificate/nginx-selfsigned.crt

Note : Dans un certificat auto-signé, les champs "Issuer" et "Subject" sont identiques.

4.1.2 Configuration de Nginx en HTTPS

1. Redirection du port 80 vers 443

server { 
    listen 80; 
    server_name www.lx-y.ephec-ti.be.; 
    return 301 https://$host$request_uri; 
}

2. Configuration HTTPS sur le port 443

server { 
    listen 443 ssl; 
    server_name www.lx-y.ephec-ti.be.; 
    
    ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
    ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
    
    # Autres configurations...
}

Problème avec les certificats auto-signés : Les navigateurs affichent un avertissement car le certificat n'est pas signé par une autorité de certification reconnue.

4.2 Obtention d'un certificat Let's Encrypt

Installation de Certbot

apt install certbot python3-certbot-nginx

Obtention du certificat

certbot --nginx -d www.lx-y.ephec-ti.be

Processus ACME

Certbot effectue automatiquement :

  1. Génération des clés publique et privée
  2. Envoi de la demande de certificat au CA
  3. Réception des challenges (tokens uniques)
  4. Réponse au challenge (généralement http-01)
  5. Récupération du certificat signé
  6. Modification de la configuration nginx

Vérifications à effectuer

Examiner les logs

cat /var/log/letsencrypt/letsencrypt.log

À rechercher dans les logs :

  • Les trois challenges ACME proposés
  • Le token utilisé
  • La configuration nginx temporaire
  • L'URL du token sur le serveur

Localisation des certificats

Les certificats sont généralement stockés dans :

  • /etc/letsencrypt/live/www.lx-y.ephec-ti.be/

Vérification avec OpenSSL

openssl x509 -noout -text -in /etc/letsencrypt/live/www.lx-y.ephec-ti.be/cert.pem

Renouvellement

certbot renew

Optimisation pour Docker

  1. Ajouter l'installation de certbot dans le Dockerfile
  2. Monter /etc/letsencrypt/ sur un volume pour la persistance

4.3 Certificat Wildcard

Obtention du certificat wildcard

certbot certonly --manual --preferred-challenges=dns --email <votre_email> --agree-tos -d *.lx-y.ephec-ti.be

Challenge DNS

  1. Certbot vous donnera un token à placer dans un record TXT
  2. Créez le record : _acme-challenge.lx-y.ephec-ti.be
  3. Vérifiez avec dig :
dig TXT _acme-challenge.lx-y.ephec-ti.be

Configuration nginx globale

Au lieu de définir les certificats dans chaque virtual host :

# Configuration globale
ssl_certificate /etc/letsencrypt/live/lx-y.ephec-ti.be/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/lx-y.ephec-ti.be/privkey.pem;

server {
    listen 443 ssl;
    server_name www.lx-y.ephec-ti.be;
    # Pas besoin de redéfinir les certificats
}

server {
    listen 443 ssl;
    server_name blog.lx-y.ephec-ti.be;
    # Pas besoin de redéfinir les certificats
}

4.4 Révocation de certificat

Quand révoquer un certificat ?

  • Changements dans la gestion de l'entreprise
  • Compromission de la clé privée
  • Informations du certificat modifiées

Commande de révocation

certbot revoke --cert-name example.com --reason keycompromise

Raisons possibles :

  • keycompromise : clé privée compromise
  • superseded : remplacé par un nouveau certificat
  • cessationofoperation : arrêt du service

Points importants à retenir

  1. Certificats auto-signés : Sécurisent la communication mais ne sont pas reconnus par les navigateurs
  2. Let's Encrypt : Autorité de certification gratuite et automatisée
  3. Certificats wildcard : Couvrent tous les sous-domaines mais nécessitent un challenge DNS
  4. Renouvellement : Les certificats Let's Encrypt expirent tous les 90 jours
  5. Docker : Monter les volumes pour la persistance des certificats

Commandes de vérification utiles

# Vérifier la configuration nginx
nginx -t

# Recharger nginx
nginx -s reload

# Vérifier l'expiration d'un certificat
openssl x509 -noout -dates -in certificat.crt

# Vérifier la connectivité HTTPS
openssl s_client -connect www.lx-y.ephec-ti.be:443

Clone this wiki locally