WinRM客户端收到HTTP错误请求状态(400)

时间:2020-01-09 10:47:05  来源:igfitidea点击:

在Active Directory域中的服务器上配置WinRM时,我遇到了一个奇怪的问题。在Windows服务器上配置并启用WinRM服务,并允许通过Windows PowerShell Remoting对其进行远程连接之后,在尝试使用Windows Server远程连接服务器后,在PowerShell控制台中将出现以下WinRM错误

Enter-PSSession lon-dc1

命令:

PS C:\Windows\system32> Enter-PSSession lon-dc01

Enter-PSSession:连接到远程服务器lon-dc1失败,并显示以下错误消息:WinRM客户端收到HTTP错误请求状态(400),但是远程服务不包含有关失败原因的任何其他信息。有关更多信息,请参见about_Remote_Troubleshooting帮助主题。

在第1行:char:1

+ Enter-PSSession lon-dc1

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo:InvalidArgument:(lon-dc1:String)[Enter-PSSession],PSRemotingTransportException

+ FullyQualifiedErrorId:CreateRemoteRunspaceFailed

我们还可以看到以下错误消息:

WinRM客户端无法处理该请求。它无法确定目标计算机发出的HTTP响应的内容类型。内容类型不存在或者无效。

同时,服务器上的WinRM端口(5985/HTTP,5986/HTTPS)响应并接受连接。我们可以使用PortQry工具或者Test-NetConnection PowerShell cmdlet检查WinRM TCP端口的可用性:

TNC lon-dc1 –port 5985

事实证明,该问题与用户的Kerberos令牌的大小有关,因为该用户是太多域安全组的成员。当令牌的大小超过16 KB时,将出现错误(请参见Kerberos MaxTokenSize和安全组文章)。在我们的情况下,它以相同的方式发生,因为身份验证包标头的大小超过16 KB,所以WinRM服务器会重置来自客户端的请求。在以上链接的文章中,我们提到了IIS上的默认HTTP标头不超过16 KB,如果由于用户令牌较大而导致HTTP身份验证出现问题,则需要将其"增加到64 KB"。

要解决此问题,我们需要减小令牌的大小(减少用户所属的安全组的数量),并且如果不可能,请更改服务器注册表项" HKEY_LOCAL_MACHINE "上以下DWORD参数的值SYSTEM\CurrentControlSet\services\HTTP\Parameters。

  • MaxFieldLength增加到0000ffff(65535);
  • MaxRequestBytes增加到0000ffff(65535)。

现在,只需重新启动服务器,然后使用Enter-PSSession从远程客户端检查WinRM连接即可。