RDS 2016 : corriger l’erreur 0x300000d après renouvellement du certificat SSL sur RD Gateway (TLS 1.2)

Après le renouvellement d’un certificat SSL sur une ferme RDS Windows Server 2016, certains utilisateurs ne peuvent plus ouvrir de session via la passerelle. Voici un guide complet et actionnable pour diagnostiquer et corriger l’erreur 0x300000d liée à TLS/certificats.

Sommaire

Contexte & symptômes

Vous disposez d’un déploiement RDS (Windows Server 2016) avec les rôles classiques : RD Gateway, RD Web Access (IIS), RD Connection Broker (Publishing & SSO/Redirector). Juste après le renouvellement du certificat SSL/TLS :

“The remote resource can’t be reached …”
Code d’erreur : 0x300000d (échec générique de connexion, typiquement en lien avec TLS/certificat).
Les journaux sur la passerelle/broker n’affichent rien de concluant.

Le caractère « aléatoire » (seulement certains utilisateurs) est un indice fort : la chaîne de certification n’est peut‑être pas reconstruite sur tous les postes, ou bien certains clients sont trop anciens pour les suites TLS/ciphers désormais exigées par le serveur.

Plan de remédiation (version courte)

  1. Ré‑appliquer le même certificat avec sa clé privée sur tous les rôles RDS (Gateway, Web Access, Broker – Publishing & SSO).
  2. Vérifier CN/SAN et la chaîne intermédiaire. Tester avec certutil.
  3. S’assurer que TLS 1.2 est activé côté serveur et côté clients. Mettre à jour les clients RDP.
  4. Tester la connectivité 443 (et 3391 UDP) et la résolution DNS depuis un poste affecté.
  5. Nettoyer les identifiants & feeds RemoteApp côté client.
  6. Activer et corréler les journaux (RdpCoreTS, Gateway, Schannel) en reproduisant l’incident.

Étapes détaillées de résolution

A. Vérifier et ré‑appliquer le certificat sur tous les rôles RDS

  1. Console RDS (Serveur Gestionnaire > Déploiement > Propriétés > Certificats) : appliquez le même certificat (format PFX/P12 avec clé privée) aux rôles :
    • RD Gateway,
    • RD Web Access (IIS),
    • RD Connection Broker – Publishing,
    • RD Connection Broker – SSO (aussi appelé Redirector).
    Après « Apply », tous les voyants doivent être au vert.
  2. Noms du certificat : le CN et les SAN doivent couvrir tous les FQDN utilisés par vos clients : p.ex. rdgateway.contoso.com, rdweb.contoso.com. Si vos utilisateurs saisissent rdp.contoso.com, ce nom doit être présent.
  3. Chaîne de confiance : importez les certificats intermédiaires au magasin « Autorités de certification intermédiaires » (ordinateur local). Vérifiez depuis le serveur : certutil -verifystore My certutil -store "CA" Et depuis un poste client (en important le .cer) : certutil -verify -urlfetch \\chemin\vers\certificat.cer
  4. Liaisons IIS (RDWeb) : dans IIS, assurez‑vous que le binding https :443 du site RDWeb pointe sur le nouveau certificat : Import-Module WebAdministration Get-WebBinding -Name "Default Web Site" -Protocol https | fl bindingInformation,certificateHash,certificateStoreName
  5. RD Gateway Manager > SSL Certificate : associez explicitement le nouveau certificat, puis redémarrez les services : iisreset Restart-Service Tsgateway

Astuce : automatiser l’application via PowerShell

Sur Windows Server 2016, le module RemoteDesktop expose des cmdlets utiles :

$Thumb = "<Empreinte_SHA1_du_certificat>"
$CB = "rdcb01.contoso.com" # FQDN du Connection Broker

# Appliquer le même certificat à tous les rôles

Set-RDCertificate -Role RDGateway     -Thumbprint \$Thumb -ConnectionBroker \$CB -Force
Set-RDCertificate -Role RDWebAccess   -Thumbprint \$Thumb -ConnectionBroker \$CB -Force
Set-RDCertificate -Role RDPublishing  -Thumbprint \$Thumb -ConnectionBroker \$CB -Force
Set-RDCertificate -Role RDRedirector  -Thumbprint \$Thumb -ConnectionBroker \$CB -Force

# Vérifier

Get-RDCertificate -ConnectionBroker \$CB | fl Role,Subject,Thumbprint,ExpiryDate 

Pour contrôler l’attache HTTP.SYS (niveau OS) :

netsh http show sslcert ipport=0.0.0.0:443

B. Assurer la compatibilité TLS / suites cryptographiques

  1. Activer TLS 1.2 côté serveur (au besoin, via registre) : REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v DisabledByDefault /t REG_DWORD /d 0 /f (Redémarrage requis.)
  2. Éviter les suites trop restrictives : privilégiez des suites ECDHE_RSA + AES_GCM courantes, tout en conservant la sécurité. Si vous avez durci récemment la liste, des clients plus anciens (RDP < 10) peuvent échouer de façon « aléatoire ».
  3. Mettre à jour les clients : Windows, macOS, iOS/Android (application « Microsoft Remote Desktop »). Les échecs 0x300000d disparaissent souvent après mise à jour du client RDP.

Exemples de profils clients affectés (fréquences observées)

ClientVersion typiqueRisqueAction
Windows 7/8.1 non patchéRDP 8.xÉlevé (TLS 1.2 partiel)Activer TLS 1.2, installer mises à jour RDP
Windows 10 ancien buildRDP 10.0 < 17134MoyenMettre à jour le client RDP via Windows Update
macOS (client RD obsolète)App RD < 10.xMoyenMettre à jour l’app Microsoft Remote Desktop

C. Vérifier la connectivité réseau (client & périmètre)

  1. Ports :
    • 443/TCP (obligatoire) : Test-NetConnection rdgateway.contoso.com -Port 443 -InformationLevel Detailed
    • 3391/UDP (optimisation RD Gateway UDP, facultatif mais recommandé) : Test-NetConnection rdgateway.contoso.com -Port 3391 -Udp
  2. DNS : le FQDN public doit résoudre vers la bonne IP. Côté client : Resolve-DnsName rdgateway.contoso.com ipconfig /flushdns
  3. CRL/OCSP : les postes doivent accéder aux points de distribution (revocation). Test d’hypothèse (à n’utiliser que ponctuellement en pré‑prod) : désactiver la vérification de révocation sur un poste pilote pour confirmer que l’échec vient bien de la révocation/chaînage.

D. Nettoyage & paramètres côté client

  1. Gestionnaire d’identifiants : supprimer les identifiants RDP enregistrés (Windows : « Gestion des identifiants ») puis réessayer.
  2. RemoteApp/RDWeb feed : si vous utilisez des flux RemoteApp, supprimez et réabonnez la connexion « RemoteApp and Desktop Connections » afin de régénérer les URLs signées et les métadonnées de publication.
  3. Dans MSTSC (« Connexion Bureau à distance ») :
    • Onglet Affichage des options > Avancé > Paramètres… : vérifiez le nom de la RD Gateway,
    • cochez « Utiliser mes identifiants de passerelle pour l’ordinateur distant » si votre flux d’authentification l’exige (SSO via Broker).

E. Journaux utiles : où regarder et quoi chercher

Activez puis reproduisez l’incident afin de capter la cause (erreur TLS, nom non conforme, chaîne incomplète, etc.).

Sur le/les serveurs

  • Applications and Services Logs > Microsoft–Windows–RemoteDesktopServices‑RdpCoreTS/Operational
  • TerminalServices‑RemoteConnectionManager / LocalSessionManager
  • Microsoft–Windows–TerminalServices‑Gateway/Operational
  • Schannel (TLS). Au besoin, augmentez la verbosité (EventLogging dans Schannel).

Sur un poste client

  • Microsoft–Windows–TerminalServices‑ClientActiveXCore/Operational
  • RDPClient/Operational

Tableau : pistes de lecture des journaux

SourceExemples d’événementsInterprétation probable
SchannelÉchec d’établissement d’informations d’identification serveur / alerte fatale TLSChaîne de certificats incomplète, nom non conforme, ciphers/TLS incompatibles
RD Gateway (Operational)Connexion refusée, erreur d’authentification, échec de tunnelCertificat non lié, stratégie CAP/RAP, ou échec TLS amont
RdpCoreTSHandshake RDG échoué, erreur génériqueSouvent un corollaire d’un problème Schannel côté serveur
Client RDPImpossible d’établir la connexion sécuriséeAncien client, CRL inaccessible, nom différent de l’URL

F. Contrôles rapides (checklist prêt‑à‑l’emploi)

  • Même certificat (avec clé privée) appliqué sur les 4 rôles RDS.
  • CN/SAN couvrent tous les FQDN utilisés par les clients.
  • Chaîne intermédiaire présente et CRL/OCSP joignables depuis Internet.
  • Liaisons IIS :443 et RD Gateway pointent sur le nouveau certificat.
  • TLS 1.2 actif côté serveur, clients RDP à jour.
  • Tests 443/3391 OK depuis au moins un poste affecté.
  • Caches DNS/identifiants/feeds purgés côté client.
  • Journaux RdpCoreTS/Gateway/Schannel concordants lors de la reproduction.

Diagnostic guidé : isolez la cause en 10 minutes

  1. Tester un navigateur : ouvrez https://rdgateway.contoso.com (page RDWeb). Avertissements de certificat ? S’il y en a, le problème est certificat/DNS.
  2. Chaîne depuis un poste touché : exportez le certificat serveur vu par le navigateur > « Détails » > vérifiez la chaîne (racine & intermédiaire). Si l’intermédiaire manque côté client ⇒ cause probable.
  3. Forcer TLS 1.2 sur le client (Windows) : Internet Options > Avancé > Sécurité : cochez TLS 1.2, décochez TLS 1.0/1.1 (test). Si la connexion réussit ensuite ⇒ compatibilité TLS.
  4. Contourner la Gateway (test administrateur) : si possible, tentez une connexion RDP interne directe au hôte cible. Si directe OK mais via Gateway KO ⇒ problème RD Gateway/cert.
  5. Corréler les heures des événements Schannel (serveur) et RDPClient (client) sur une même tentative pour identifier l’étape de rupture.

Bonnes pratiques de certificat pour RDS 2016

  • Utilisez un seul certificat wildcard ou multi‑SAN couvrant rdgateway et rdweb (et tout alias réellement utilisé).
  • Conservez le même certificat sur Gateway/Web/Broker Publishing/SSO pour minimiser les écarts de confiance.
  • Renouvelez avant l’expiration et planifiez un redémarrage contrôlé des services RD Gateway et IIS après l’application.
  • Documentez et versionnez l’empreinte (thumbprint) appliquée par rôle ; gardez un PFX chiffré en coffre avec la passphrase.

Exemples de commandes utiles (administrateur)

# Lister les certificats serveurs (magasin ordinateur)
Get-ChildItem Cert:\LocalMachine\My | Select Subject,NotAfter,Thumbprint | Sort NotAfter

# Afficher les bindings HTTPS IIS (certificat utilisé)

Import-Module WebAdministration
Get-WebBinding -Protocol https | Format-Table Host,Port,certificateHash

# Vérifier les ports ouverts en périmètre (depuis un poste externe)

Test-NetConnection rdgateway.contoso.com -Port 443 -InformationLevel Detailed
Test-NetConnection rdgateway.contoso.com -Port 3391 -Udp

# Redémarrer proprement les services web/RDG

iisreset
Restart-Service Tsgateway -Force 

Questions fréquentes (FAQ)

Pourquoi seuls certains utilisateurs échouent‑ils ?

Trois causes sont majoritaires : chaînage incomplet (intermédiaire manquant) que certains OS reconstruisent mal, clients non à jour (TLS/ciphers) et mismatch de nom (le client appelle rdp.contoso.com mais le certificat ne couvre pas ce nom).

Dois‑je désactiver TLS 1.0/1.1 ?

Recommandé à terme, mais progressivement. Activez d’abord TLS 1.2 partout, validez que tous les clients fonctionnent, puis désactivez les anciennes versions.

Le certificat est « bon » sur le serveur, pourquoi ça casse encore ?

Vérifiez la liaison réelle utilisée par IIS et RD Gateway (certificat lié à :443 et à la Gateway). Après un renouvellement, il est courant que l’ancienne empreinte reste liée.

Tableau récapitulatif : symptômes → causes → actions

SymptômeCause plausibleAction recommandée
Erreur 0x300000d pour quelques utilisateursIntermédiaire manquant / clients obsolètesImporter l’intermédiaire, activer TLS 1.2, mettre à jour les clients
Avertissement certificat dans RDWebCN/SAN ne couvrent pas le FQDNRe‑délivrer un certificat avec tous les SAN requis
Connexion OK en interne, KO via GatewayCertificat non lié à RD GatewayLier le nouveau certificat dans RD Gateway Manager et redémarrer
Événements Schannel « alerte fatale »Incompatibilité ciphers/TLS ou chaîne rompueAjuster suites TLS, importer la chaîne, vérifier la révocation
Échecs aléatoires avec proxiesAccès CRL/OCSP bloquéAutoriser les URLs CRL/OCSP, vérifier certutil -url

Procédure de validation finale

  1. Certificats : même PFX appliqué aux 4 rôles ; CN/SAN valides ; chaîne complète (intermédiaires installés).
  2. Bindings : IIS :443 et RD Gateway ⇢ nouvelle empreinte (vérifiée par Get-WebBinding et RD Gateway Manager).
  3. TLS : 1.2 activé, ciphers usuels disponibles, clients mis à jour.
  4. Réseau : 443/TCP et 3391/UDP accessibles depuis Internet ; DNS correct.
  5. Clients : identifiants purgés, feeds RemoteApp réabonnés, MSTSC correctement paramétré.
  6. Journalisation : aucun nouvel événement d’échec Schannel/Gateway lors de tests répétés.

Informations complémentaires utiles

  • Le symptôme « certains utilisateurs seulement » indique fréquemment :
    • un chaînage incomplet (intermédiaire manquant) ;
    • des postes anciens/non patchés (TLS/ciphers) ;
    • un mismatch de nom (FQDN différent de celui couvert par le certificat).
  • En dernier recours, réalisez un audit TLS externe de la passerelle, corrigez selon les recommandations (chaîne complète, ciphers modernes, TLS 1.2), puis rejouez vos tests.

Résumé actionnable

  1. Ré‑appliquer le nouveau certificat aux 4 rôles RDS et redémarrer RD Gateway/IIS.
  2. Vérifier CN/SAN + chaîne complète (tests certutil côté serveur et client).
  3. Activer TLS 1.2, mettre à jour les clients RDP.
  4. Tester 443/3391 et DNS depuis un poste affecté.
  5. Nettoyer identifiants/feeds côté client, puis retester.
  6. Collecter les journaux (RdpCoreTS, Gateway, Schannel) pour isoler la cause si l’erreur persiste.

Annexe : script d’audit express (copier/coller)

Exécutez en PowerShell (administrateur) sur un serveur RDS 2016 ; adaptez $CB et $Site si besoin.

$ErrorActionPreference = "Stop"
$CB   = "rdcb01.contoso.com"
$Site = "Default Web Site"

Write-Host "== Certificats RDMS ==" -ForegroundColor Cyan
Get-RDCertificate -ConnectionBroker \$CB | Sort Role | Format-Table Role, Subject, Thumbprint, ExpiryDate

Write-Host "\`n== IIS Bindings ==" -ForegroundColor Cyan
Import-Module WebAdministration
Get-WebBinding -Name \$Site -Protocol https | Format-Table Host, Port, certificateHash, certificateStoreName

Write-Host "\`n== TLS 1.2 (Schannel) ==" -ForegroundColor Cyan
Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" |
Select Enabled, DisabledByDefault

Write-Host "\`n== HTTP.SYS sslcert :443 ==" -ForegroundColor Cyan
netsh http show sslcert ipport=0.0.0.0:443

Write-Host "\`n== Services clés ==" -ForegroundColor Cyan
Get-Service Tsgateway, W3SVC | Select Name, Status

Write-Host "`n== Rappel ==`n- Appliquer le PFX sur RDGateway, RDWebAccess, RDPublishing, RDRedirector`n- Vérifier CN/SAN/Chaîne`n- Redémarrer RDG/IIS" -ForegroundColor Yellow 

Conclusion

Dans l’immense majorité des cas, l’erreur 0x300000d après renouvellement d’un certificat sur RDS 2016 est due à une incohérence de certificat (liaison manquante, CN/SAN incomplet, chaîne non publiée) ou à une incompatibilité TLS côté client. En ré‑appliquant le même certificat sur l’ensemble des rôles RDS, en validant la chaîne et en forçant TLS 1.2 avec des clients à jour, vous restaurez rapidement des connexions stables via RD Gateway. Conservez ce guide comme checklist de référence lors de vos prochains renouvellements.

Sommaire