NLMP 协议如何处理尝试使用与服务器支持不同的 NTLM 版本进行连接的客户端?

问题描述 投票:0回答:0

我很难找到 NLMP(“NT LAN Manager (NTLM) Authentication Protocol”的简写)如何处理与服务器预期不同的 NTLM 版本。

Microsoft 提供了 NTLMv1NTLMv1 with Client challengeNTLMv2 身份验证的示例。

我的第一直觉是检查谈判旗帜。我找到了一个我认为是“协商”版本的版本。 微软表示,如果设置了一个名为 NTLMSSP_NEGOTIATE_NTLM

Negotiate Flag
,引用,

请求使用 NTLM v1 会话安全协议。 NTLMSSP_NEGOTIATE_NTLM 必须在 NEGOTIATE_MESSAGE 中设置到服务器,CHALLENGE_MESSAGE 到客户端。

但是,在

CHALLENGE
AUTHENTICATE
数据包中,上述每个协议示例中似乎都设置了相关标志。我找不到任何其他提到 NTLM 版本的协商标志(除了 NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSSECURITY,但是,正如微软自己所说,这是一个“用词不当”)。

在对文档进行更多搜索后,我发现了这个有趣的注释:

注意 LM 和 NTLM 身份验证版本不是由协议协商的。它必须在身份验证之前在客户端和服务器上配置。本节中定义的 NTOWF v1 函数依赖于 NTLM 版本,并且仅由 NTLM v1 使用。本节定义的 LMOWF v1 函数也是版本相关的,仅由 LM 和 NTLM v1 使用。

所以我猜

NTLMSSP_NEGOTIATE_NTLM
毕竟是一条红鲱鱼。本说明确实解决了 NTLM 版本在哪里设置的问题(在客户端,由客户端),但它没有描述如果您尝试使用 NTLMv2 访问 NTLMv1 服务器会发生什么。如果它可以帮助更准确地回答问题,我有兴趣稍后实现 WinRM 协议。我还需要同时支持 NTLMv1 和 NTLMv2。

我目前正在从头开始编写一个库来处理整个协议规范(不是 WinRM,目前只有 NLMP),而且我目前的知识还不足以了解实现它的所有肮脏细节。我所需要的至少是一个由其他库(如 GSS)处理此类事情的示例(最好是 NLMP 消息本身)。

我在 Microsoft 官方文档中找不到任何提及,我不知道其他库如何处理此类情况。我试过浏览一些源代码,但找不到与问题相关的想法。

windows protocols ntlm ntlm-authentication ntlmv2
© www.soinside.com 2019 - 2024. All rights reserved.