Objectifs
- Rendre un petit site NGINX accessible en HTTPS.
- Observer la redirection HTTP vers HTTPS.
- Vérifier le certificat.
- Tester le renouvellement.
- Les sorties sont des exemples attendus, pas des captures d’exécution sur votre VM.
- Le domaine, les adresses, dates, numéros de version, chemins de certificat et identifiants de processus varient.
- Comparer surtout le statut HTTP,
Location, les chemins annoncés et le résultat des tests.
1. Domaine et accès réseau
Vous savez déjà créer un enregistrement DNS. Pour ce TP, choisissez un nouveau nom dédié, par exemple tls.votre-domaine.fr. Remplacez-le dans chaque commande et dans la configuration par votre véritable nom.
| Type | Nom | Valeur |
|---|---|---|
| A | tls (si votre zone est votre-domaine.fr) | IPv4 publique de votre VM |
| AAAA, facultatif | tls | IPv6 publique de cette VM, uniquement si elle est opérationnelle |
Un record AAAA incorrect peut faire échouer la validation : Let’s Encrypt préfère initialement IPv6 quand A et AAAA existent. Corriger cet enregistrement ou le retirer si votre serveur ne fournit pas IPv6.
- VM Ubuntu avec NGINX installé et accès administrateur.
- Autoriser TCP 80 et TCP 443 vers cette VM dans les règles du fournisseur cloud (Security Group sur AWS), le pare-feu local et, si nécessaire, la redirection de ports.
- Le nom doit atteindre cette VM depuis Internet : une réussite sur localhost ne prouve pas l’accès public.
sudo apt update
sudo apt install nginx curl dnsutils
dig +short A tls.votre-domaine.fr
dig +short AAAA tls.votre-domaine.frLe premier résultat doit être votre IPv4 publique. Le second est vide si vous n’utilisez pas IPv6 ; sinon, il doit afficher votre IPv6 publique. Vérifier les valeurs, pas seulement la présence d’un résultat.
sudo ss -lntp 'sport = :80'
systemctl status nginx --no-pagerss -lntp affiche les écoutes TCP et leurs processus ; le filtre limite l’affichage au port 80. Le service NGINX doit être active (running).
Si apache2 occupe le port 80, deux serveurs ne peuvent pas utiliser la même adresse et le même port. Pour une VM de formation où NGINX remplace Apache, arrêter Apache puis démarrer NGINX :
sudo systemctl stop apache2
sudo nginx -t && sudo systemctl start nginxCela interrompt les sites encore servis par Apache. N’effectuer ce changement que dans ce cas. Apache peut aussi être encore activé au démarrage : prévoir la gestion des services avant un prochain redémarrage de VM.
2. Préparer le site HTTP
Les blocs de création de fichiers suivants se font dans une session administrateur. Les délimiteurs 'EOF' conservent les variables NGINX telles que $uri.
sudo -i
mkdir -p /var/www/tp-nginx-07
cat > /var/www/tp-nginx-07/index.html <<'EOF'
<!doctype html>
<html lang="fr"><meta charset="utf-8"><title>TP HTTPS</title><h1>TP-07 : HTTPS fonctionne</h1></html>
EOF
cat > /etc/nginx/conf.d/tp-07-https.conf <<'EOF'
server {
listen 80;
server_name tls.votre-domaine.fr;
root /var/www/tp-nginx-07;
index index.html;
access_log /var/log/nginx/tp-07-access.log;
error_log /var/log/nginx/tp-07-error.log;
location / {
try_files $uri $uri/ =404;
}
}
EOFserver_namecontient uniquement le nom DNS : nihttp://, ni slash final.- La configuration est sous
/etc/nginx/conf.d/et est chargée par l’inclusion habituelle de ce répertoire dans le blochttp. Vérifier que cette inclusion existe si votre configuration principale est personnalisée. - Les logs du site sont séparés pour retrouver facilement les tests.
- Le répertoire des pages ne contient ni configuration ni logs : seuls les fichiers du site y sont servis.
chmod 755 /var/www/tp-nginx-07
chmod 644 /var/www/tp-nginx-07/index.htmlLes fichiers restent détenus par root. NGINX lit les pages avec www-data sur Ubuntu.
755: les « autres » (ici, le compte utilisé par NGINX) ontr-x(5) pour atteindre les pages sans modifier le répertoire.644: les « autres » ontr--(4) pour lire le HTML sans le modifier ; aucune exécution n’est nécessaire.
nginx -t && systemctl reload nginx
exitnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulLe rechargement ne produit normalement aucune sortie. Depuis un poste extérieur à la VM (avec curl.exe sous Windows si nécessaire), tester :
curl -i http://tls.votre-domaine.fr/HTTP/1.1 200 OK
Server: nginx/1.24.0 (Ubuntu)
Content-Type: text/html
<!doctype html>
<html lang="fr"><meta charset="utf-8"><title>TP HTTPS</title><h1>TP-07 : HTTPS fonctionne</h1></html>Le texte de la page annonce l’objectif ; à cette étape la connexion est encore HTTP. Continuer uniquement si ce domaine affiche bien la page du TP. Une page de bienvenue Apache peut être un fichier statique servi par le site par défaut de NGINX : vérifier server_name et le rechargement.
3. Installer Certbot et demander le certificat
sudo apt update
sudo apt install certbot python3-certbot-nginxcertbot fournit le client ACME ; python3-certbot-nginx lui permet de valider le domaine et d’adapter NGINX. Cette procédure utilise les paquets Ubuntu, comme le cours STRICT ; ne pas mélanger cette installation avec une installation Snap existante.
Avant que Certbot ne modifie la configuration, conserver une copie hors du répertoire chargé par NGINX :
sudo cp /etc/nginx/conf.d/tp-07-https.conf /root/tp-07-https.conf.before-certbotcp copie le fichier sans supprimer l’original. Il n’y a aucune commande de suppression de nginx.conf à effectuer.
sudo certbot --nginx -d tls.votre-domaine.fr --redirect--nginx: utilise NGINX pour prouver le contrôle du domaine et installer le certificat.-d: nom exact à couvrir, sanshttp://, chemin ou slash final.--redirect: configure le passage de HTTP vers HTTPS.
Fournir votre adresse e-mail si elle est demandée et accepter les conditions d’utilisation. Certbot réalise la validation HTTP-01, enregistre le certificat et ajoute HTTPS et la redirection dans NGINX.
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/tls.votre-domaine.fr/fullchain.pem
Key is saved at: /etc/letsencrypt/live/tls.votre-domaine.fr/privkey.pem
Successfully deployed certificate for tls.votre-domaine.frUtiliser les chemins réellement affichés : un certificat déjà existant peut donner un nom différent. Un message d’échec de validation signifie que le certificat n’a pas été délivré ; consulter la section diagnostic.
4. Vérifier HTTPS et la configuration
sudo nginx -t
sudo cat /etc/nginx/conf.d/tp-07-https.conf
sudo certbot certificatesDans la configuration modifiée, repérer notamment les éléments suivants. Cet extrait sert à lire le résultat de Certbot, pas à remplacer tout le fichier :
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/tls.votre-domaine.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tls.votre-domaine.fr/privkey.pem;443 ssl: NGINX accepte une connexion TLS sur le port HTTPS.ssl_certificate: certificat et chaîne présentés au navigateur.ssl_certificate_key: clé privée utilisée par NGINX.- Le bloc HTTP contient une redirection vers HTTPS ; sa forme exacte peut varier selon la version de Certbot.
Depuis votre poste extérieur :
curl -I http://tls.votre-domaine.fr/
curl -I https://tls.votre-domaine.fr/
curl -iL http://tls.votre-domaine.fr/HTTP/1.1 301 Moved Permanently
Location: https://tls.votre-domaine.fr/
HTTP/1.1 200 OK
Content-Type: text/html
<!doctype html>
<html lang="fr"><meta charset="utf-8"><title>TP HTTPS</title><h1>TP-07 : HTTPS fonctionne</h1></html>-I: requête HEAD, uniquement les en-têtes.-i: en-têtes et contenu.-L: suit la redirection ;-iLmontre ici le 301 puis le 200 et la page.- Ne pas utiliser
-kpour valider le TP : cette option désactive la vérification du certificat.
Ouvrir également https://tls.votre-domaine.fr/ dans le navigateur et consulter les informations du certificat : domaine couvert, autorité et expiration. Le certificat est gratuit, mais cela ne rend pas automatiquement l’application sûre.
5. Tester le renouvellement
systemctl list-timers --all | grep certbot
sudo certbot renew --dry-runAvec l’installation Ubuntu utilisée ici, la liste doit normalement contenir certbot.timer et certbot.service. Les dates varient. Si le timer est absent, vérifier le mode d’installation de Certbot ; ne pas considérer le renouvellement automatique comme validé.
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/tls.votre-domaine.fr/fullchain.pem (success)--dry-run teste la procédure via le service de test, sans remplacer le certificat de production. Si plusieurs certificats existent, ils peuvent tous apparaître dans le résultat. Garder les conditions de validation disponibles, notamment TCP 80.
6. Observer les logs et diagnostiquer
Après les tests curl, sur la VM :
sudo tail -n 10 /var/log/nginx/tp-07-access.log
sudo tail -n 20 /var/log/nginx/tp-07-error.log
sudo tail -n 30 /var/log/letsencrypt/letsencrypt.logtail -n affiche les dernières lignes. Un journal d’erreurs peut rester vide si les tests réussissent.
198.51.100.20 - - [05/Oct/2026:17:00:00 +0000] "HEAD / HTTP/1.1" 301 0 "-" "curl/8.x"
198.51.100.20 - - [05/Oct/2026:17:00:01 +0000] "GET / HTTP/1.1" 200 112 "-" "curl/8.x"Comparer l’heure, la méthode, le chemin et le statut : ces lignes montrent la redirection HTTP puis la page servie. L’adresse du client, la version curl et le nombre d’octets varieront.
Créer une erreur simple sans toucher au certificat
Depuis le poste extérieur, demander un fichier absent :
curl -i https://tls.votre-domaine.fr/fichier-absent.htmlHTTP/1.1 404 Not FoundSur la VM, relire le log d’accès :
sudo tail -n 5 /var/log/nginx/tp-07-access.log198.51.100.20 - - [05/Oct/2026:17:01:00 +0000] "GET /fichier-absent.html HTTP/1.1" 404 162 "-" "curl/8.x"La connexion HTTPS a réussi ; c’est le fichier demandé qui manque. Avec try_files ... =404, cette réponse n’entraîne pas forcément une ligne dans error_log. Tester à nouveau / doit donner 200.
| Symptôme | Vérification utile |
|---|---|
| NGINX ne démarre pas : Address already in use | sudo ss -lntp 'sport = :80' : identifier Apache ou un autre processus. |
| Page du site par défaut | Vérifier server_name sans protocole ni slash, puis test et rechargement. |
| Certbot : timeout / connection refused | Vérifier DNS A/AAAA, IP publique, accès TCP 80, règles cloud et pare-feu. |
| Certbot : unauthorized / Invalid response | Le challenge arrive sur une mauvaise page ou un autre serveur ; consulter le log Certbot, les DNS et le bloc NGINX. |
| HTTPS inaccessible | Vérifier l’écoute TCP 443 et les règles réseau. |
| Erreur de certificat | Vérifier le nom demandé, le certificat installé et sa date ; ne pas masquer le problème avec -k. |
Le site et le certificat sont conservés pour les prochains tests et renouvellements. Ne pas supprimer les fichiers dans /etc/letsencrypt pendant qu’ils sont référencés par NGINX.