Impossible de se connecter en RDP à Windows Server 2022 : guide complet de dépannage

Les sessions RDP qui se ferment immédiatement après l’authentification sur Windows Server 2022 sont la hantise des administrateurs : pas de message d’erreur clair, un service critique indisponible, et des utilisateurs bloqués. Ce guide exhaustif détaille toutes les vérifications, commandes et bonnes pratiques pour rétablir un accès bureau à distance sécurisé et stable.

Sommaire

Vue d’ensemble du problème

Sur certains serveurs Windows Server 2022 hérités, la connexion locale via console fonctionne mais toute tentative RDP externe échoue. L’authentification aboutit (mot de passe ou smart‑card accepté), l’écran Welcome apparaît parfois une fraction de seconde puis le client affiche : « Your Remote Desktop Services session has ended ». Le phénomène n’affecte pas les nouvelles machines fraîchement installées, ce qui oriente vers un écart de configuration ou un composant corrompu plutôt qu’un bug générique de l’OS.

Symptômes caractéristiques

  • Échec systématique depuis n’importe quel poste client (mstsc.exe ou RD Web).
  • Aucune invite d’acceptation de certificat n’est présentée ; l’erreur survient après la phase d’initialisation graphique.
  • Journal Système : Event ID 40 (Kernel‑Power) suivi d’un Event ID 24 (TerminalServices‑LocalSessionManager) indiquant la fermeture de session quasi instantanée.
  • Lanceurs PowerShell (Enter‑PsSession) aboutissent avant de se refermer immédiatement.

Comprendre le flux d’une session RDP

La réussite d’un bureau à distance repose sur une chaîne logicielle et réseau :

  1. Le service TermService crée un écouteur TCP (par défaut 3389).
  2. NLA effectue une authentification Kerberos ou NTLM avant l’ouverture de session interactive.
  3. Le serveur obtient un certificat Machine pour chiffrer le canal TLS (sécurité CredSSP).
  4. Une licence RDS est allouée si le serveur est en mode Session‑Host avec licence centrale.
  5. Les politiques locales ou GPO appliquent restrictions et quotas.
  6. La session utilisateur est créée par Winlogon.exe et transmise au service graphique.

Une rupture à n’importe quel maillon provoque la déconnexion immédiate que vous observez.

Troubleshooting pas à pas

ÉtapeObjectifCommande / ActionRésultat attendu
1Distinguer réseau vs. systèmemstsc /v:localhostConnexion réussie = incident réseau ; échec = problème local
2Vérifier l’écoute RDPqwinsta ou netstat -ano | find ":3389"Listener rdp-tcp à l’état Listen
3Confirmer le port utiliséRegistre : HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\PortNumberValeur décimale 3389
4Contrôler le certificatMMC → Certificats (Machine) → Remote DesktopCertificat valide et clé privée présente
5Tester Network Level AuthenticationDésactiver temporairement NLA (Panneau Système → Remote)Si la connexion fonctionne sans NLA : vérifier SPN, drift NTP, canal sécurisé
6Examiner les journauxEvent Viewer → Applications & Services Logs\Microsoft\Windows\TerminalServices-*Identification d’erreurs précises (licence, auth, GPO)
7Vérifier les droitsGPMC → « Allow log on through Remote Desktop Services » + appartenance Remote Desktop UsersComptes autorisés listés
8Réparer et redémarrersfc /scannow, Windows Update, redémarrage TermServiceFichiers système restaurés, patchs appliqués

Analyse détaillée de chaque étape

Tester en local avec mstsc /v:localhost

Ce test contourne complètement le pare‑feu et toute appliance intermédiaire. Un succès signifie que la pile RDP du serveur est saine ; concentrez‑vous alors sur les ACL, le filtrage IPS ou une Gateway RD mal configurée. En revanche, un échec local signale immédiatement un souci de service ou de certificats.

Le listener RDP‑TCP

La commande qwinsta doit afficher :

rdp-tcp   65536  Listen       

Si le listener est absent ou en Down, recréez‑le :

cscript %windir%\system32\SCRegEdit.wsf /AR 0
net start TermService

Port personnalisé

Les migrations rapides ou les politiques hétérogènes peuvent changer le port RDP. Validez la valeur PortNumber (REG_DWORD, little‑endian) puis ouvrez le port correspondant dans le pare‑feu Windows et sur vos équipements périmétriques.

Certificat et TLS

Depuis 2022, Microsoft force TLS 1.2 pour RDP. Un certificat expiré ou sans clé privée génère un Event ID 1058 (RemoteDesktopServices-RemoteFX-Graphics) et la session est refusée. Supprimez‑le, puis :

Restart-Service TermService -Force

Le service créera un nouveau certificat auto‑signé de 2048 bits.

NLA et Kerberos

Network Level Authentication s’appuie sur Kerberos pour valider les identités avant d’ouvrir la session graphique. Trois causes majeures :

  • SPN du serveur manquant : exécutez setspn -Q "TERMSRV/<FQDN>".
  • Dérive temporelle : la tolérance Kerberos est de 5 minutes. Vérifiez w32tm /query /status.
  • Canal sécurisé AD rompu : ré‑établissez‑le avec Test-ComputerSecureChannel -Repair.

Logs Terminal Services

Filtrez sur les Event ID :

IDSourceDescription fréquente
1012TerminalServices-PrintersÉchec de redirection d’imprimantes, souvent bénin
1296TS‑LicensingServeur de licences indisponible ou quota épuisé
56TermDDErreur de protocole (cipher suite ou version TLS rejetées)
50WinlogonÉchec de chargement de profil utilisateur

Droits d’accès et GPO héritées

Les serveurs issus de vieilles OU héritent parfois de politiques restrictives :

  • Encryption Oracle Remediation forcé à Force Updated Clients peut couper d’anciens clients.
  • Set client connection encryption level fixé à High mais sans support RSA 4096 sur le certificat.
  • Limit number of connections : une valeur 0 bloque toute nouvelle session.

Comparez les GPO entre un serveur fonctionnel et un serveur défaillant avec gpresult /h compare.html ou l’outil AD MX.

Réparation des fichiers système

Des mises à jour incomplètes peuvent corrompre la DLL rdpcorets.dll. La séquence recommandée :

Dism /Online /Cleanup-Image /RestoreHealth
sfc /scannow
wuauclt /detectnow
Restart-Computer

Ne réenregistrez rdpclip.exe qu’en dernier recours.

Scénarios spécifiques rencontrés en entreprise

Conflit avec un agent de sécurité

Certaines EDR insèrent des DLL dans lsass.exe ou termsrv.dll et déclenchent des déconnexions. Placez TermService dans la liste d’exclusion du produit ou déployez la dernière version de l’agent.

Service Broker dans une ferme RDS

Si le serveur est membre d’une collection, la session est redirigée par le Connection Broker. Un certificat Broker expiré ou un enregistrement DNS obsolète provoque la fermeture immédiate. Exécutez Get-RDConnectionBrokerHighAvailability puis mettez à jour le rôle si nécessaire.

Machines virtuelles clonées

Le clonage sans sysprep conserve les identités cryptographiques : SID identique, certificat RDP dupliqué, SPN identique. Le résultat est une chute Kerberos. Régénérez les GUID via sysprep /generalize /oobe /shutdown avant déploiement.

Outils avancés de diagnostic

  • Process Monitor : filtrez sur termsrv.exe pour détecter un accès refusé sur un fichier .dll.
  • Wireshark : capture sur port 3389, recherchez un EncryptedAlert après le ClientHello (cipher mismatch).
  • ETW trace : logman start RDPTrace -p Microsoft-Windows-TermDD 0xFFFFFFFF 5 -o rdp.etl puis tracerpt.

Bonnes pratiques de sécurisation RDP

Rétablir la connexion ne suffit pas : il faut renforcer la surface d’attaque !

  1. Exiger le tunneling VPN ou RD Gateway et fermer 3389 public.
  2. Limiter le nombre de tentatives avec Account Lockout Policy.
  3. Activer UDR (User Datagram Protocol) transport (TCP+UDP) pour une meilleure latence, mais filtrer UDP 3389 en entrée si non utilisé.
  4. Déployer des certificats émis par une AC interne plutôt que des auto‑signés.
  5. Surveiller les Event ID 4625 (échec d’auth) et corréler avec fail2ban ou Azure Sentinel.

Automatiser la vérification avec PowerShell

Script minimal pour scanner 100 hôtes et générer un rapport CSV :

$servers = Get-Content .\listeServeurs.txt
$result = foreach ($s in $servers) {
  try {
    $tcp = Test-NetConnection -ComputerName $s -Port 3389 -InformationLevel Quiet
    $nla = (Invoke-Command -ComputerName $s { (Get-ItemProperty `
      'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server').UserAuthentication })
    [pscustomobject]@{
      Serveur = $s
      TCP3389 = $tcp
      NLA     = $nla
    }
  } catch { }
}
$result | Export-Csv .\Etat_RDP.csv -NoTypeInformation

Importez ensuite le CSV dans Power BI ou Excel pour visualiser l’état global.

Checklist de validation finale

  • Listener rdp-tcp actif sur le bon port.
  • Certificat RDP valide (date, Signature SHA‑256).
  • NTP synchronisé, w32tm /stripchart montre un écart < 100 ms.
  • SPN TERMSRV/<FQDN> inscrit et unique dans l’AD.
  • Event Viewer exempt d’ID 56, 1058, 1296 lors d’une connexion de test.
  • Connexion confirmée depuis un poste externe et depuis mstsc /v:localhost.

Conclusion

Dans 90 % des cas, l’analyse méthodique détaillée ci‑dessus permet d’isoler et de corriger la cause racine : port fermé, certificat expiré, NLA mal négocié ou GPO trop restrictive. Pour le reste, les traces ETW et un contrôle attentif de la chaîne Kerberos/TLS dévoilent les derniers écueils. En appliquant ces bonnes pratiques, vous garantissez un accès Bureau à distance performant et conforme aux exigences de sécurité moderne sur Windows Server 2022.

Sommaire