必须同时启用客户端和服务器端SMB数字签名才能有效防中间人篡改;仅配一侧会导致连接失败或降级。服务器端启用“Microsoft网络服务器:对通信进行数字签名(始终)”,客户端启用“Microsoft网络客户端:对通信进行数字签名(始终)”,并禁用SMBv1、启用SMB加密、确保使用主机名访问。
要在 windows server 中真正防止 smb 通信被中间人篡改,必须同时强制客户端和服务器端启用数字签名——只配一边会导致连接失败或自动降级,起不到防护作用。
服务器端:强制要求所有入站连接带有效签名
这是关键一环,确保你的 Windows Server 不接受任何未签名的 SMB 请求:
- 打开组策略管理编辑器(gpedit.msc 或域环境中的 GPMC)
- 导航至:计算机配置 → 管理模板 → 网络 → Lanman 服务器
- 找到并双击“Microsoft 网络服务器: 对通信进行数字签名(始终)”
- 选择“已启用”,点击确定
注意:默认仅域控制器启用此项,普通成员服务器、文件服务器必须手动开启。
客户端侧也要同步配置(不能只靠服务器)
Windows Server 作为 SMB 客户端访问其他共享时(例如挂载另一台 NAS 或域控制器的共享),自身也需强制签名出站请求:
- 在同一组策略中,导航至:计算机配置 → 管理模板 → 网络 → Lanman 工作站
- 启用“Microsoft 网络客户端: 对通信进行数字签名(始终)”
否则,当本机去访问开启了强制签名的服务器时,会因自己不签名而被拒绝连接。
验证签名是否真实生效
策略应用后无需重启,运行 gpupdate /force 刷新即可。快速确认方式:
- 在该服务器上执行:Get-SmbServerConfiguration | fl RequireSecuritySignature → 应返回 True
- 若它正在访问其他共享,运行:Get-SmbConnection | fl Signing → Signing 字段必须为 True
- 若其他客户端正连这台服务器,登录客户端运行相同命令,Signing 同样应为 True
配套加固建议(非可选,是实际部署前提)
单独开签名不够,还需排除常见失效场景:
- 禁用 SMBv1:运行 Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force,避免协议回退漏洞
- 启用 SMB 加密:运行 Set-SmbServerConfiguration -EncryptData $true -RejectUnencryptedAccess $true,防流量嗅探
- 检查兼容性:Windows XP、老旧 NAS、部分网络打印机不支持强制签名,连接将直接失败,需提前评估
- 使用主机名而非 IP 访问共享:保障 Kerberos SPN 正确解析,支撑签名所需的会话密钥强度


















