案例背景
某中型制造企业拥有20台用于日常办公的Windows 10/11终端,并通过一台部署了远程桌面网关(RDG)和远程桌面会话主机(RDSH)角色的Windows Server 2019服务器提供集中式远程接入服务。近期,IT部门接到多起用户报告,称在尝试通过RDP客户端连接办公桌面时,出现连接中断、黑屏或直接报错“发生身份验证错误。要求的函数不受支持”的情况。由于正值季度末结算期,业务部门对远程连接的稳定性要求极高,亟需快速定位并解决该故障。
故障现象复现
技术人员在测试环境中复现了故障。当使用标准RDP客户端输入正确的域名、用户名和密码后,连接过程短暂显示正在配置会话,随即弹出错误对话框。具体报错信息为:“发生身份验证错误。要求的函数不受支持”(The target account is not secured for kerberos negotiation or the server is not responding correctly)。
与此同时,在服务器的事件查看器中,观察到以下关键日志:
- 事件ID 13310:远程桌面服务未收到来自网关服务器(RDG)的有效响应。
- 事件ID 14007:SSL证书验证失败,明确指出当前的TLS证书链中,用于加密通道的证书已过期或不受信任。
根因分析
经过初步排查,确认该企业的RDS环境使用的是自签名证书或由内部CA签发的证书。由于缺乏自动续期机制,用于保护RD Gateway和RD Connection Broker通信安全的SSL证书已于两周前过期。
在Windows RDP架构中,RD Gateway负责在Internet和企业内网之间建立安全的TLS隧道。当证书过期时,客户端无法验证服务器的身份,或者服务器端在握手阶段拒绝接受过期的凭证,从而导致身份验证流程中断。此外,如果RDSH服务器上安装的证书与RD Gateway不匹配,也会引发此类连锁故障。
解决方案与操作步骤
为解决此问题,我们需要执行证书轮换操作,并确保远程桌面服务能够正确加载新的证书。以下是基于PowerShell的标准化修复流程。
第一步:获取最新的有效证书
首先,需从内部证书颁发机构(CA)申请或获取一个新的、未过期的SSL证书。假设新证书的主题名称(SAN)包含RDS服务器的FQDN(如 rds.company.local)。在服务器上打开“MMC”管理控制台,添加“证书”单元,查看“个人”和“企业信任”存储,确认新证书已就绪。
第二步:使用PowerShell绑定证书至远程桌面角色
传统的图形界面操作有时无法彻底更新RDS内部的服务配置,推荐使用PowerShell进行命令行操作,以确保配置的一致性。执行以下步骤:
- 查找证书指纹:
Get-ChildItem Cert:\LocalMachine\My | Where-Object {$_.Subject -like "*rds.company.local*"} - 绑定证书到RD Gateway:
获取证书指纹后,使用以下命令将证书关联到远程桌面网关服务:
New-RDCertificateForRDGateway -Path "C:\NewCert.cer" - 绑定证书到RD Connection Broker:
如果环境中有多台服务器组成的负载均衡集群,还需将证书分配给连接代理:
New-RDCertificateForRDS -CollectionName "DefaultCollection" -CertificatePath "C:\NewCert.pfx" -Password (ConvertTo-SecureString "YourPassword" -AsPlainText -Force)
第三步:重启相关服务
证书绑定完成后,必须重启远程桌面服务相关的后台进程才能生效。依次重启以下服务:
- Remote Desktop Services (TermService)
- Remote Desktop Configuration (RdConfig)
- Remote Desktop Gateway (Rdgateway)
可以通过PowerShell一键重启:
Restart-Service -Name TermService, RdConfig, Rdgateway -Force
第四步:清除客户端缓存并验证
由于RDP客户端可能会缓存旧的证书哈希值,建议指导用户在客户端执行以下操作:
- 删除 `%APPDATA%\Microsoft\Terminal Server Client\` 下的 `server-certificates` 文件。
- 或者,在RDP连接选项中,勾选“从不提示我输入凭据”以外的所有安全性选项,强制重新协商。
重新发起连接测试。若连接成功且无警告弹窗,则表明修复有效。
预防建议
为避免此类问题再次发生,建议采取以下措施:
- 启用证书自动续期:对于由微软AD CS管理的证书,可配置自动注册策略;对于第三方CA,建议使用脚本监控证书有效期,并在到期前30天触发自动更新。
- 实施监控告警:在SCOM、Zabbix或PRTG等监控系统中添加对RDS证书有效期的检查项,一旦即将过期即发送通知给IT运维团队。
- 定期审计配置:每季度使用 `Get-RDServer` 等 cmdlet 检查当前绑定的证书状态,确保与服务端实际使用的证书一致。
专家提示:在生产环境执行证书替换前,务必创建系统还原点或虚拟机快照,以防操作失误导致远程管理服务完全不可用。