TCP 连接在验证协商期间中止

在 SMB 问题的网络跟踪中,你发现在验证协商过程中发生了 TCP 重置中止。 本文介绍了如何对此情况进行故障排除。

原因

此问题可能是由协商验证失败导致的。 这通常是因为 WAN 加速器会修改原始 SMB 协商数据包。

Microsoft 不再允许出于任何原因修改验证协商数据包。 这是因为此行为会产生严重的安全风险。

对验证协商数据包应用了下列要求:

  • 验证协商进程使用 FSCTL_VALIDATE_NEGOTIATE_INFO 命令。
  • 必须对验证协商响应进行签名。 否则,连接将中止。
  • 应将 FSCTL_VALIDATE_NEGOTIATE_INFO 消息与协商消息进行比较,以确保没有任何更改。

解决方法

你可以暂时禁用验证协商过程。 为此,请找到以下注册表子项:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters

在“Parameters”项下,将“RequireSecureNegotiate”设置为 0。

在 Windows PowerShell 中,可以运行以下 cmdlet 来设置此值:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" RequireSecureNegotiate -Value 0 -Force

注意

无法在 Windows 10、Windows Server 2016 或更高版本的 Windows 中禁用“验证协商”进程。

如果客户端或服务器都不支持“验证协商”命令,则可以通过将 SMB 签名设置为必需来解决此问题。 SMB 签名被认为比验证协商更安全。 但是,如果要求签名,也可能会降低性能。

参考