为什么NTLM不能双跳?

时间:2013-11-11 20:01:11

标签: authentication kerberos ntlm

我的理解是NTLM是一种挑战响应协议,而Kerberos则通过了一张票。我遇到的大多数信息都说这是Kerberos可以双跳的原因,但NTLM不能解释为什么NTLM不能仅仅转发响应和挑战。

即,为什么这种情况不可能:

客户端通过前端服务器进行身份验证,然后前端服务器需要代表客户端对后端服务器进行身份验证。然后前端尝试进行身份验证并发送用户名,然后后端向前端发出挑战,前端将此挑战转发给客户端,客户端发出响应,然后前端转发此响应到了后端。

我知道它不会像这样工作,但我对细节感到好奇。为什么服务器无法转发允许双跳的响应和挑战?

感谢。

2 个答案:

答案 0 :(得分:1)

虽然您可以通过中介可行地转发质询/响应消息,但您所描述的内容是不可能的。你所描述的并不是真正的双跳认证,你所描述的是尝试两次验证单个会话。 NTLM对会话进行身份验证,客户端不应重新验证已经过身份验证的会话。

也就是说,在客户端使用“前端服务器”进行身份验证后的示例中,该前端服务器无法再发送新的挑战。

答案 1 :(得分:1)

不幸的是,当客户端使用NTLM进行身份验证时,前端服务器无法作为另一台(下一跳)服务器的客户端进行身份验证。这是因为NTLM身份验证的工作原理:服务器向客户端发送一个质询,客户端将其与密码哈希组合在一起,根据此组合计算另一个哈希,然后将其发送回服务器。验证客户端返回值正确并由此进行身份验证的唯一方法是在服务器端执行相同的计算,这需要访问客户端的真实密码(嗯,它是一个哈希值,但出于我们的目的,它是相同的事情)。为了安全起见,域控制器不会分发此密码,这意味着服务服务器必须将客户端的身份验证哈希传递给DC进行验证。然后,DC使前端服务器知道客户端的身份验证一切正常。

请参阅此博客文章: npm docs