2

我的理解是 NTLM 是一个质询响应协议,而 Kerberos 传递一张票。我遇到的大多数信息只是说这就是 Kerberos 可以双跳但 NTLM 不能的原因,而没有解释为什么 NTLM 不能只转发响应和挑战。

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

客户端向前端服务器进行身份验证,然后前端服务器需要代表客户端向后端服务器进行身份验证。前端然后尝试认证并发送用户名,后端然后向前端发出质询,前端将此质询转发给客户端,客户端发出响应,前端再转发此响应到后端。

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

谢谢。

4

2 回答 2

2

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

请参阅此博客文章: https ://blogs.msdn.microsoft.com/besidethepoint/2010/05/08/double-hop-authentication-why-ntlm-fails-and-kerberos-works/

于 2019-01-07T18:18:46.453 回答
1

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

也就是说,在您的示例中,客户端通过“前端服务器”进行身份验证后,该前端服务器无法发送新的质询。

于 2013-11-11T20:48:16.707 回答