WinRM HTTPS证书认证失败:服务器拒绝指定凭据故障排查
根因说明
从事件日志的明确报错可以定位,故障核心是WinRM证书映射关联的用户凭据校验未通过,故障服务器与正常服务器的配置差异通常集中在以下几类:
- 证书映射配置完成后,关联的本地管理员账户密码被修改/过期,导致映射中存储的旧凭据失效
- 证书映射中填写的用户名格式错误,WinRM默认去域控制器校验账户,未匹配到本地非域账户
- 本地安全策略、UAC远程令牌过滤规则拦截了本地账户的网络认证请求
- 原有证书映射条目损坏,或关联账户被禁用、权限被移除
定位排查步骤
- 校验关联账户有效性
执行以下PowerShell命令确认账户状态:
确认返回结果满足:Get-LocalUser -Name "你的本地管理员用户名" | Select-Object Name,Enabled,PrincipalSource,PasswordExpiredEnabled值为TruePrincipalSource值为Local(若为ActiveDirectory说明账户是域账户,不符合WinRM证书映射要求的非域账户规则)PasswordExpired值为False
- 检查现有证书映射配置
执行命令枚举所有已配置的WinRM证书映射:
核对条目内的winrm enumerate winrm/config/service/certmappingSubject(证书使用者)、Issuer(证书颁发者)和你使用的客户端证书完全匹配,UserName字段必须带本地账户前缀,格式为.\用户名或服务器主机名\用户名,若直接写用户名会被WinRM识别为域账户发起校验。 - 核查本地安全策略限制
打开本地组策略编辑器gpedit.msc,依次检查以下配置:- 定位到 计算机配置 > Windows 设置 > 安全设置 > 本地策略 > 用户权限分配 > 从网络访问此计算机,确认本地管理员组在允许列表中
- 定位到 计算机配置 > Windows 设置 > 安全设置 > 本地策略 > 用户权限分配 > 拒绝从网络访问这台计算机,确认本地管理员账户/组不在拒绝列表中
- 若本地管理员账户未设置密码,定位到 计算机配置 > Windows 设置 > 安全设置 > 本地策略 > 安全选项 > 账户: 使用空密码的本地账户只允许进行控制台登录,将该选项设置为
已禁用
- 排除UAC远程访问拦截
检查注册表路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System下的LocalAccountTokenFilterPolicy键(REG_DWORD类型),将值设置为1。该键值为0时,本地管理员账户远程登录会被UAC剥离管理员令牌,直接导致凭据校验失败。
修复方案
完成上述排查后,按以下步骤重新配置即可解决问题:
- 删除原有损坏的证书映射条目,将命令内的Subject、Issuer、URI替换为你实际环境的参数(可通过之前的enumerate命令获取现有条目的对应参数):
winrm delete winrm/config/service/certmapping?Subject=你的客户端证书使用者名称+Issuer=证书颁发者指纹+URI=* - 重新创建证书映射,确保输入的密码是本地账户当前有效的最新密码:
winrm create winrm/config/service/certmapping?Subject=你的客户端证书使用者名称+Issuer=证书颁发者指纹+URI=* @{UserName=".\本地管理员用户名";Password="账户当前有效密码";Enabled="true"} - 强制重启WinRM服务加载新配置:
Restart-Service winrm -Force - 从客户端重新发起WinRM证书认证连接,验证认证是否正常。
注:你之前调整的Schannel路径下的
ClientAuthTrustMode键值仅用于解决客户端证书信任链校验失败的问题,和本次凭据校验失败的报错无关,无需反复修改该配置。
内容的提问来源于stack exchange,提问作者Jack Payne
相关产品推荐
相关产品推荐

