在 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 签名被认为比验证协商更安全。 但是,如果要求签名,也可能会降低性能。