Securiser nginx
| Fiche express | |
|---|---|
| Type | Durcissement TLS et génération de certificats |
| Voir aussi | Nginx · Certbot · Proxy nginx |
Génération manuelle de certificats TLS pour Nginx (auto-signé, signé par une autorité tierce payante, ou autorité de certification maison), et bases de durcissement. Pour un certificat public gratuit et renouvelé automatiquement, Certbot (Let's Encrypt) est aujourd'hui l'option à privilégier par défaut ; cette page reste utile pour les cas où un certificat manuel est nécessaire (usage interne, autorité d'entreprise, test).
Créer un dossier dédié aux certificats
cd /etc/nginx/ mkdir ssl && cd ssl/
Génération de la clé et de la CSR
Génération de la clé privée (protégée par mot de passe) :
openssl genrsa -aes256 -out wiki.exemple.tld.key 2048
Création de la demande de signature de certificat (CSR) :
openssl req -new -key wiki.exemple.tld.key -out wiki.exemple.tld.csr
Relecture du contenu de la CSR avant envoi à une autorité :
openssl req -noout -text -in wiki.exemple.tld.csr
Retirer la protection par mot de passe de la clé, nécessaire pour que Nginx puisse démarrer sans intervention manuelle (à faire uniquement sur une clé dont l'accès au fichier est déjà strictement restreint) :
openssl rsa -in wiki.exemple.tld.key -out wiki.exemple.tld.deprotected.key
Option 1 : signature par une autorité tierce payante
Envoyer la CSR à l'autorité choisie (procédure classique — la CSR est collée dans un formulaire web, l'autorité renvoie un certificat serveur et un certificat intermédiaire). Concaténer les deux dans l'ordre attendu par Nginx :
cat certificat-serveur.crt certificat-intermediaire.crt > certificate.exemple.tld.crt
Option 2 : autorité de certification maison
openssl genrsa -aes256 2048 > ca.key openssl x509 -req -in wiki.exemple.tld.csr -out wiki.exemple.tld.crt -CA ca.crt -CAkey ca.key -CAcreateserial -CAserial ca.srl
Utile pour un usage interne (les clients doivent alors importer la CA maison comme approuvée) ; inadapté à un service exposé publiquement.
Option 3 : certificat auto-signé
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
Génère directement clé et certificat en une commande, sans passer par une CSR séparée — pratique pour du test, génère un avertissement navigateur en production.
Configuration Nginx
vi /etc/nginx/sites-enabled/wiki.exemple.tld.conf
server {
listen 443 ssl;
server_name app.exemple.tld;
ssl_certificate /etc/nginx/ssl/certificate.exemple.tld.crt;
ssl_certificate_key /etc/nginx/ssl/app.exemple.tld.deprotected.key;
location / {
root /home/www/;
index index.php index.html index.htm;
}
}
Recharger la configuration (préférer systemctl reload nginx, qui recharge sans
couper les connexions en cours, à un redémarrage complet) :
systemctl reload nginx
(La directive historique ssl on;, ainsi que l'ancienne commande
/etc/init.d/nginx restart, sont obsolètes sur les versions récentes de Nginx —
respectivement retirée au profit de listen ... ssl;, et remplacée par
systemctl sur les systèmes systemd.)
Voir aussi
- Nginx — directives TLS de base et présentation générale
- Certbot — obtention/renouvellement automatisé, alternative recommandée en production
- Proxy nginx — exemples de blocs
serveren reverse proxy avec TLS