Le serveur du Granuloshop tourne sur un Beelink Gemini T34 sous Windows 10 Pro, branché directement sur la ligne fibre à domicile. Après un déménagement, le serveur a dû être reconfiguré sur un nouvel ordinateur : plus d'accès distant, IIS mal configuré pour plusieurs sites, pas de HTTPS. Ce billet documente la remise en service complète, en insistant sur les outils de vérification externes qui permettent de valider HTTPS depuis l'extérieur.
192.168.0.1), qui joue le rôle de routeur principal. Un second routeur Buffalo assure le Wi-Fi. C'est sur le NEC ATERM que se configurent les redirections de ports vers le serveur.
1. Trouver l'IP du serveur sur le réseau local
Quand le serveur n'a pas d'écran, la première difficulté est de connaître son IP locale pour s'y connecter. La commande suivante, lancée depuis n'importe quel PC du réseau, liste tous les appareils détectés :
arp -a
Pour identifier lequel correspond au serveur, on peut ensuite demander le nom NetBIOS de chaque IP :
nbtstat -a 192.168.0.X
Si le serveur est en Wi-Fi et n'obtient pas d'IP DHCP (adresse 169.254.x.x), on peut lui forcer une IP fixe depuis sa propre invite de commande :
netsh interface ip set address "Wi-Fi 2" static 192.168.0.5 255.255.255.0 192.168.0.1
netsh interface ip set dns "Wi-Fi 2" static 192.168.0.1
169.254.x.x indique que Windows n'a pas pu obtenir d'IP via DHCP. Le serveur peut tout de même fonctionner en IPv6 pur (Firefox peut naviguer), mais il est invisible sur le réseau local IPv4.
2. Activer le Bureau à distance (RDP)
Sur Windows 10 Pro, RDP est disponible nativement mais désactivé par défaut. Ce script .bat lancé en administrateur active RDP, ouvre le port dans le pare-feu et désactive NLA pour une compatibilité maximale :
:: Activation RDP
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
:: Ouverture du pare-feu port 3389
netsh advfirewall firewall add rule name="RDP GranuloShop" protocol=TCP dir=in localport=3389 action=allow
:: Désactivation NLA
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0 /f
Après un redémarrage du service TermService (ou du serveur), la connexion RDP se fait depuis n'importe quel PC du réseau local avec :
mstsc /v:192.168.0.4
Pour un raccourci sur le bureau, un fichier .bat d'une ligne suffit. Le /f lance en plein écran :
mstsc /v:192.168.0.4 /f
3. Monter un lecteur réseau vers le serveur
Pour transférer des fichiers sans passer par une clé USB, on monte un lecteur réseau pointant vers le dossier de travail du serveur. La commande /persistent:yes rend le montage permanent (survit aux redémarrages) :
net use Y: \\192.168.0.4\Users\granuloshop\Documents /persistent:yes
Le lecteur Y: est alors accessible comme un disque local depuis l'explorateur Windows, ce qui simplifie tous les échanges de fichiers avec le serveur.
4. Corriger les liaisons IIS pour le multi-site
IIS gère plusieurs sites sur les mêmes ports 80 et 443 grâce aux liaisons par nom d'hôte (Host Header). Chaque site doit avoir une liaison explicite avec son nom de domaine. Le problème classique est une liaison sans nom d'hôte sur le Default Web Site qui intercepte tout le trafic :
' Mauvaise config : intercepte tout
*:80: (sans nom d'hôte)
' Bonne config : chaque site a son nom d'hôte
*:80:granuloshop.com
*:80:www.granuloshop.com
*:80:www.omnibvs.org
Pour le Default Web Site utilisé uniquement en accès local par IP directe, on spécifie l'IP du serveur au lieu de "Toutes non attribuées", ce qui l'isole du trafic par nom de domaine :
' Default Web Site : accès local uniquement par IP
192.168.0.4:80: (sans nom d'hôte)
192.168.0.4:443: (sans nom d'hôte)
5. HTTPS avec Let's Encrypt et win-acme
win-acme est un client ACME pour Windows qui s'intègre directement à IIS. Il demande le certificat Let's Encrypt, l'installe dans le store Windows et configure les liaisons HTTPS d'IIS automatiquement. Le renouvellement automatique est planifié via le Gestionnaire des tâches.
La version à télécharger est la pluggable (x64), qui supporte l'intégration IIS native. L'exécutable wacs.exe se place dans un dossier simple, par exemple C:\win-acme\.
cd C:\win-acme
wacs.exe
En mode simple (N), win-acme liste les sites IIS, on sélectionne le site, on confirme les domaines et il fait tout le reste. Le renouvellement automatique est configuré pour 55 jours (les certificats Let's Encrypt durent 90 jours).
Un point important : win-acme utilise par défaut la validation http-01 via SelfHosting (fichier servi depuis la mémoire), qui est plus fiable que la validation par système de fichiers. Si la validation échoue en mode FileSystem avec une erreur 403 Forbidden, c'est souvent IIS qui bloque l'accès au dossier .well-known. Le passage en mode SelfHosting résout le problème :
' Dans win-acme → Manage renewals → Edit → Validation
' Choisir : [http] Serve verification files from memory
wacs.exe (suite à un déménagement ou une réinstallation), la tâche planifiée pointe vers l'ancien chemin. Il faut la recréer via More options → (Re)create scheduled task dans win-acme. Le compte SYSTEM est recommandé pour qu'elle s'exécute même sans session ouverte.
6. Outils externes pour vérifier HTTPS
Un site peut sembler fonctionner en local alors que HTTPS est cassé depuis l'extérieur. Voici les outils indispensables pour vérifier objectivement, depuis internet :
Vérifier la propagation DNS — whatsmydns.net vérifie depuis une cinquantaine de serveurs DNS dans le monde que votre domaine pointe bien vers la bonne IP. Utile après un changement de registrar ou une modification d'enregistrement A.
Vérifier que les ports sont ouverts depuis internet — yougetsignal.com teste si un port est accessible depuis l'extérieur sur votre IP publique. HTTPS nécessite que le port 443 soit ouvert et redirigé vers le serveur dans le routeur.
' Exemple : port 80 ouvert, port 443 fermé
' → Le routeur (NEC ATERM dans ce cas) n'a pas de règle NAT pour le port 443
' Solution : ajouter dans ポートマッピング設定 :
' LAN側ホスト : 192.168.0.4
' プロトコル : TCP
' ポート番号 : 443-443
Vérifier la chaîne de redirections HTTP→HTTPS — redirect-checker.org simule une requête depuis internet et affiche tous les codes HTTP intermédiaires. Une redirection correcte ressemble à :
http://granuloshop.com
→ 301 Moved Permanently
→ https://granuloshop.com/
→ 200 OK
granuloshop.com dans le navigateur peut aboutir au mauvais site ou à une erreur, même si tout fonctionne depuis l'extérieur. C'est le problème du hairpin NAT : la requête sort vers internet, revient sur la box FAI, qui ne sait pas la renvoyer vers le serveur interne. Solution locale : ajouter les domaines dans le fichier hosts de chaque PC.
' C:\Windows\System32\drivers\etc\hosts
192.168.0.4 granuloshop.com
192.168.0.4 www.granuloshop.com
192.168.0.4 www.omnibvs.org
192.168.0.4 blanpain.org
192.168.0.4 www.blanpain.org
7. Redirection HTTP vers HTTPS avec URL Rewrite
Le module URL Rewrite pour IIS permet de rediriger automatiquement toutes les requêtes HTTP vers HTTPS, sans modifier le code ASP. Il s'installe via un .msi et ajoute une icône Réécriture d'URL dans le Gestionnaire IIS. La règle se place dans le web.config de chaque site :
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP vers HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect"
url="https://{HTTP_HOST}/{R:1}"
redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
Pour le Default Web Site utilisé en accès local par IP directe, on ajoute une condition supplémentaire pour ne pas rediriger les requêtes venant du réseau interne :
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
<add input="{HTTP_HOST}" pattern="^192\.168\." negate="true" />
</conditions>
8. Permissions IIS et pool d'applications
Après avoir monté les sites, une erreur 401 Unauthorized ou 500 peut indiquer que le compte du pool d'applications n'a pas accès au dossier physique du site. La commande icacls accorde les droits de lecture et d'exécution de façon récursive :
icacls "C:\Users\granuloshop\Documents\sites\granuloshop" /grant "IIS_IUSRS:(OI)(CI)RX" /T
Chaque site devrait avoir son propre pool d'applications dédié. Pour un site en HTML pur (sans ASP ni ASP.NET), le pool doit être configuré en No Managed Code pour éviter que IIS tente d'interpréter les fichiers comme du code .NET :
' Dans Pools d'applications → Paramètres avancés
Version du CLR .NET : Aucune version du CLR (No Managed Code)
%windir%\system32\inetsrv\appcmd set vdir "blanpain/" /userName:"" /password:""
Bilan
Ce billet couvre la remise en service complète d'un serveur IIS après déménagement : accès distant RDP, découverte de l'IP sur le réseau local, correction des liaisons IIS multi-sites, certificats HTTPS Let's Encrypt avec win-acme, redirection HTTP→HTTPS et correction des permissions. Les outils externes (whatsmydns.net, yougetsignal.com, redirect-checker.org) sont essentiels pour valider que HTTPS fonctionne réellement depuis internet et pas seulement en local.
Le billet suivant traitera du diagnostic des erreurs 500 sur les pages ASP via les logs IIS natifs, en particulier les cas où Server.GetLastError() ne retourne rien
voir billet 48 →.