MaDoVi - Le wiki

Machines - Données - Virtualisation

Outils pour utilisateurs

Outils du site


archives:rip_homeserver.diy:configuration_du_reverse_proxy_nginx_avec_ssl_et_certificat_auto-signe

Configuration du reverse proxy NginX avec SSL et certificat auto-signé

1. Introduction

Le SSL est de plus en plus utilisé par les services auto-hébergés. En général ce protocole est géré par le serveur web qui reçoit les requêtes directement. Mais j'ai récemment rencontré des soucis pour accéder proprement à certains de mes sites sécurisés par ce protocole à travers mon reverse proxy tournant sous NginX.

J'ai donc décidé de configurer NginX pour qu'il fonctionne correctement avec ce type de requête en lui laissant gérer les certificats que l'on créera et auto-signera grâce à openssl.

Il faut d'abord avoir mis en place NginX en tant que cache et reverse proxy comme décrit ce tuto Installation et configuration d’un reverse proxy avec NginX

2. Création des clés et certificats

On commence par installer openssl qui nous permettra de créer les clés SSL et le certificat :

aptitude install openssl

Ensuite on crée un répertoire qui contiendra le certificat SSL dédié au site :

mkdir /etc/nginx/cle_nomdusite/

Le nom du répertoire n'a pas d'importance, mais il faudra le renseigner dans le fichier de configuration de NginX.

On se rend dans ce répertoire afin que les clés y soient créées :

cd /etc/nginx/cle_nomdusite

D'abord il faut générer une clé RSA en 1024bits :

openssl genrsa -out server.key 1024

A partir de cette clé on crée le certificat générique :

openssl req -new -key server.key -out server.csr

Remplissez les champs demandés comme vous le souhaitez.

On crée enfin le certificat au format x509 toujours grâce à openssl :

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

3. Configuration de NginX

Ceci fait, il ne reste qu'à configurer NginX pour qu'il travaille avec les fichiers que nous venons de créer. Pour cela, la configuration se fait dans le fichier /etc/nginx/sites-available/default comme toute redirection via le reverse proxy. On édite le fichier en passant par un client SCP ou un éditeur de texte en ligne de commande comme nano.

nano /etc/nginx/sites-available/default

Il suffit donc d'ajouter ces lignes :

server {
   listen 443;
   server_name *.domaine.com;
   ssl on;
   ssl_certificate /etc/nginx/keys/server.crt;
   ssl_certificate_key /etc/nginx/keys/server.key;
   location / {
     proxy_pass https://192.168.0.129;
   }
}
  • listen 443 demande à NginX d'écouter sur le port 443. C'est le port par défaut à utiliser pour le SSL.
  • server_name sous cette forme indique que la suite de la configuration s'appliquera aux requêtes sur le domaine “domaine.com” et tous ses sous-domaines. Si vous enlevez les 2 premiers caractères *. la configuration ne fonctionnera que pour le domaine.
  • ssl on indique que le SSL peut être utilisé pour cette redirection.
  • ssl_certificate désigne le répertoire et le nom du fichier servant de certificat.
  • ssl_certificate_key désigne le répertoire et le nom du fichier servant de clé RSA.
  • proxy_pass est l'adresse du serveur web vers lequel les requêtes doivent être redirigées.

Notez qu'il est possible d'utiliser un même certificat pour plusieurs domaines/sites. Mais il peut être plus judicieux de créer un certificat par site et de les placer dans un répertoire dédié que l'on indiquera spécifiquement dans la configuration de NginX. Pensez à rediriger le port 443 vers la machine qui sert de reverse proxy, si vous êtes derrière un NAT.


4. Conclusion

Avec cette solution je n'ai plus de problème pour accéder via SSL aux sites que j'héberge. Bien entendu, il serait bien plus logique de passer par une autorité de certification plutôt que d'auto-signer les certificats. Mais pour une utilisation @home ou des tests la façon de faire décrite ici peut très bien suffire.


archives/rip_homeserver.diy/configuration_du_reverse_proxy_nginx_avec_ssl_et_certificat_auto-signe.txt · Dernière modification : 30/10/2021 23:13 de Cram