Bonjour,
Je vous propose un tuto pour ceux qui souhaiterait accéder aux applications web héberger sur votre lan via un nom de domaine local auto signé.
J'utiliserai 'nginx' comme proxy et 'mkcert' pour gérer les certificats auto signés en locale. J'utiliserai aussi une réécriture DNS pour gérer la redirection du domaine locale vers mon serveur Nginx.
Je prendrais l'exemple d'une redirection DNS avec 'Adguard' que j'utilise chez moi ; mais pour 'PiHole' ; c'est la même chose.
Tuto adapté du site 'DigitalOcean'
1) Intérêt du SSL en local :
J'utilise un navigateur (LibreWolf) qui n'aime pas trop les accès 'HTTP' aux applications web et qui m'affiche à chaque fois un message d'alerte qui je dois valider pour pouvoir accéder à mes applications web.
Avoir une connexion SSL permet aussi de chiffrer aussi les échanges entre le serveur et le client ; ce qui peut-être aussi interessant sur un LAN pour renforcer la sécurité.
2) Architecture de mon LAN et hypothèse de travail :
J'ai un pare-feu OpenWrt chez moi qui gère trois zones. J'ai déjà un Nginx comme 'reverse proxy' pour ma DMZ où sont situés les services accessibles depuis l'extérieur.
Je souhaite utiliser un domaine local auto signé pour accéder à toutes mes applications web dans mon LAN.
Je peux soit générer des certificats auto signé pour chaque service (fastidieux) ou alors mettre un proxy en amont qui va gérer le certificat et effectuer la redirection vers l'application web concernée.
J'ai choisi la solution de mettre en place un proxy local 'nginx' pour gérer le certificat SSL et les accès via un sous domaine local.
Je pars du principe que vous avez accès à une machine Linux pour générer le certificat via l'outil 'mkcert' qui est multi plateforme.
3) installation de l'outil mkcert et création du certificat :
Je vous donne le lien du projet github : https://github.com/FiloSottile/mkcert
Je fais l'installation sur mon poste de travail (Debian 13 Trixie) :
Remarque : l'installation pourrait se faire directement sur le serveur hébergeant Nginx.
Je prends comme exemple que vous utilisez déjà un domaine sur votre LAN : 'domain.local' pour accéder a vos machines simplement.
Nous allons ici créer un sous domaine avec un 'wildcard' pour que nginx puisse faire l'aiguillage par la suite.
Je vais créer un certificat pour le sous domaine 'cloud' :
Vous pouvez utiliser l'option '-install' pour regénérer le certificat automatiquement à l'échéance.
Il va générer deux fichiers :
4) installation et configuration de nginx :
Je pars du principe que vous avez déjà un containeur (LXC, LXD...) ou un serveur Linux disponible vierge ou qui a déjà une autre fonction avec une IP Fixe dans votre LAN.
4-1) Installation Nginx
Je fais l'installation dans un containeur LXD avec un Debian 13 pour ma part :
J'ai besoin que de ces deux paquets pour notre utilisation.
4-2) Création de la clé Diffie-Hellman (DHparam)
4-3) Création de la configuration ssl nginx
Toute la configuration se fait dans le répertoire '/etc/nginx/snippets'
Je recopie les deux fichiers créés à l'étape 3 dans le répertoire racine '/etc/nginx' (ou un autre répertoire) s'ils ont été créés sur une autre machine.
Je les renomme pour les adaptés au format 'nginx' :
Je crée maintenant le fichier qui pointe sur le fichier contenant la clé et le certificat.
Puis je colle le texte suivant :
Je crée maintenant le fichier qui contient les paramètres SSL :
Puis je colle le texte suivant :
4-4) Création des fichiers de configuration des sites
Je vais prendre l'exemple de l'application 'adguard'.
Je crée le fichier 'adguard.conf' :
Puis je colle le texte suivant :
Remarque : Vous pouvez aussi rajouter une redirection HTTP vers HTTPS dans votre fichier en y rajoutant :
J'active ensuite mon site par un lien symbolique :
Je vérifie la configuration :
Si la commande vous retourne un 'warning' de ce type ; ne pas en tenir compte :
On relance nginx et on active le lancement automatique :
4-5) Réécriture DNS
Nous avons besoins pour finir de rediriger toutes les requêtes du domaine '*.cloud.domain.local' vers l'adresse IP de notre serveur Nginx.
Sur Adguard, aller dans le menu 'Filtres', puis 'Réécriture DNS' et mettre les informations suivantes ; puis valider :

On test pour terminer en tapant dans son navigateur : https://adguard.cloud.domain.local
La première fois ; il vous demandera de valider le certificat auto signé sur votre navigateur et si tous se passe bien, vous arriverez sur votre site Web 'Adguard' avec le petit cadenas à gauche de votre URL :

Je vous propose un tuto pour ceux qui souhaiterait accéder aux applications web héberger sur votre lan via un nom de domaine local auto signé.
J'utiliserai 'nginx' comme proxy et 'mkcert' pour gérer les certificats auto signés en locale. J'utiliserai aussi une réécriture DNS pour gérer la redirection du domaine locale vers mon serveur Nginx.
Je prendrais l'exemple d'une redirection DNS avec 'Adguard' que j'utilise chez moi ; mais pour 'PiHole' ; c'est la même chose.
Tuto adapté du site 'DigitalOcean'
1) Intérêt du SSL en local :
J'utilise un navigateur (LibreWolf) qui n'aime pas trop les accès 'HTTP' aux applications web et qui m'affiche à chaque fois un message d'alerte qui je dois valider pour pouvoir accéder à mes applications web.
Avoir une connexion SSL permet aussi de chiffrer aussi les échanges entre le serveur et le client ; ce qui peut-être aussi interessant sur un LAN pour renforcer la sécurité.
2) Architecture de mon LAN et hypothèse de travail :
J'ai un pare-feu OpenWrt chez moi qui gère trois zones. J'ai déjà un Nginx comme 'reverse proxy' pour ma DMZ où sont situés les services accessibles depuis l'extérieur.
Je souhaite utiliser un domaine local auto signé pour accéder à toutes mes applications web dans mon LAN.
Je peux soit générer des certificats auto signé pour chaque service (fastidieux) ou alors mettre un proxy en amont qui va gérer le certificat et effectuer la redirection vers l'application web concernée.
J'ai choisi la solution de mettre en place un proxy local 'nginx' pour gérer le certificat SSL et les accès via un sous domaine local.
Je pars du principe que vous avez accès à une machine Linux pour générer le certificat via l'outil 'mkcert' qui est multi plateforme.
3) installation de l'outil mkcert et création du certificat :
Je vous donne le lien du projet github : https://github.com/FiloSottile/mkcert
Je fais l'installation sur mon poste de travail (Debian 13 Trixie) :
Bash:
sudo apt install libnss3-tools
curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64"
chmod +x mkcert-v*-linux-amd64
sudo cp mkcert-v*-linux-amd64 /usr/local/bin/mkcert
Remarque : l'installation pourrait se faire directement sur le serveur hébergeant Nginx.
Je prends comme exemple que vous utilisez déjà un domaine sur votre LAN : 'domain.local' pour accéder a vos machines simplement.
Nous allons ici créer un sous domaine avec un 'wildcard' pour que nginx puisse faire l'aiguillage par la suite.
Je vais créer un certificat pour le sous domaine 'cloud' :
Bash:
mkcert "*.cloud.domain.local"
Vous pouvez utiliser l'option '-install' pour regénérer le certificat automatiquement à l'échéance.
Il va générer deux fichiers :
Bash:
_wildcard.cloud.domain.local-key.pem
_wildcard.cloud.domain.local.pem
4) installation et configuration de nginx :
Je pars du principe que vous avez déjà un containeur (LXC, LXD...) ou un serveur Linux disponible vierge ou qui a déjà une autre fonction avec une IP Fixe dans votre LAN.
4-1) Installation Nginx
Je fais l'installation dans un containeur LXD avec un Debian 13 pour ma part :
Bash:
sudo apt install nginx ssl-cert
J'ai besoin que de ces deux paquets pour notre utilisation.
4-2) Création de la clé Diffie-Hellman (DHparam)
Je vais créer une clé de 4096 caractères, mais elle peut être plus courte.
Bash:
sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096
4-3) Création de la configuration ssl nginx
Toute la configuration se fait dans le répertoire '/etc/nginx/snippets'
Je recopie les deux fichiers créés à l'étape 3 dans le répertoire racine '/etc/nginx' (ou un autre répertoire) s'ils ont été créés sur une autre machine.
Je les renomme pour les adaptés au format 'nginx' :
Bash:
mv _wildcard.cloud.domain.local-key.pem nginx-selfsigned.key
mv _wildcard.cloud.domain.local.pem nginx-selfsigned.cert
Je crée maintenant le fichier qui pointe sur le fichier contenant la clé et le certificat.
Bash:
sudo nano /etc/nginx/snippets/self-signed.conf
Puis je colle le texte suivant :
Bash:
ssl_certificate /etc/nginx/nginx-selfsigned.crt;
ssl_certificate_key /etc/nginx/nginx-selfsigned.key;
Je crée maintenant le fichier qui contient les paramètres SSL :
Bash:
sudo nano /etc/nginx/snippets/ssl-params.conf
Puis je colle le texte suivant :
Bash:
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
ssl_ecdh_curve secp384r1;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
4-4) Création des fichiers de configuration des sites
Je vais prendre l'exemple de l'application 'adguard'.
Je crée le fichier 'adguard.conf' :
Bash:
sudo nano /etc/nginx/sites-available/adguard.conf
Puis je colle le texte suivant :
NGINX:
server {
listen 443 ssl;
http2 on;
client_max_body_size 50m;
server_name adguard.cloud.domain.local;
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
error_log /var/log/nginx/error.log notice;
access_log /var/log/nginx/access.log;
proxy_intercept_errors on;
location / {
include /etc/nginx/conf.d/proxy.conf;
proxy_pass http://adguard.domain.local; # a adapter avec l'adresse de votre serveur Adguard
}
}
Remarque : Vous pouvez aussi rajouter une redirection HTTP vers HTTPS dans votre fichier en y rajoutant :
NGINX:
server {
listen 80;
listen [::]:80;
server_name adguard.cloud.domain.local;
return 301 https://$server_name$request_uri;
}
J'active ensuite mon site par un lien symbolique :
Bash:
cd /etc/nginx/sites-enabled
sudo ln -s /etc/nginx/sites-available/adguard.conf adguard
Je vérifie la configuration :
Bash:
sudo nginx -t
Si la commande vous retourne un 'warning' de ce type ; ne pas en tenir compte :
Code:
nginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate "/etc/ssl/certs/nginx-selfsigned.crt"
On relance nginx et on active le lancement automatique :
Bash:
sudo systemctl enable nginx
sudo systemctl restart nginx
4-5) Réécriture DNS
Nous avons besoins pour finir de rediriger toutes les requêtes du domaine '*.cloud.domain.local' vers l'adresse IP de notre serveur Nginx.
Sur Adguard, aller dans le menu 'Filtres', puis 'Réécriture DNS' et mettre les informations suivantes ; puis valider :

On test pour terminer en tapant dans son navigateur : https://adguard.cloud.domain.local
La première fois ; il vous demandera de valider le certificat auto signé sur votre navigateur et si tous se passe bien, vous arriverez sur votre site Web 'Adguard' avec le petit cadenas à gauche de votre URL :

Dernière édition: