这里有太多的问题无法单独回答,所以这里有一个更好的思考方式。
NTLM 是一种 p2p 身份验证协议。客户端直接向服务器发送票证,服务器可以直接验证它或将其发送到域控制器进行验证。这就是为什么工作组 PC 到工作组 PC 只需用户名和密码即可成功。但是,使用 NTLM,您无法证明您将票证发送到的服务器实际上是您想要将其发送到的服务器。这意味着没有服务器身份验证,因此也意味着没有相互身份验证。
Kerberos 始终依赖第三个服务器来对您和您尝试对其进行身份验证的服务器进行身份验证。为此,您首先要向 KDC(域控制器)进行身份验证,然后使用生成的票证请求目标服务的新票证。KDC 使用 SPN 在目录中查找目标服务的详细信息,并将身份加密为只有目标服务知道的密钥。
然后,客户端将新票证发送到目标服务,该服务解密票证,然后使用加密票证中共享的密钥加密对客户端的响应。由于只有指定服务器可以解密票证(因此可以看到共享加密密钥),因此客户端有证据表明它正在与具有给定 SPN 的服务进行通信。这提供了服务器身份验证,因此也提供了相互身份验证。如果您没有 SPN,则无法要求 KDC 创建只有服务器知道的票证。
如果您没有 SPN,则有一种鲜为人知的 Kerberos 流(称为用户到用户),它需要带外进程来交换额外的票证。这很少使用,因为它更复杂并且只是转移服务器身份验证问题。
这解释了为什么这两种协议都存在。NTLM 存在于没有 KDC 的地方,或者服务未配置 SPN 的地方。缺点是 NTLM 安全性较差。
在 Windows 领域,NTLM 和 Kerberos 大多可以互换,因为它们封装在一个名为 SPNEGO 的单独协议中,SPNEGO 是一种身份验证协商协议。通常首先尝试 Kerberos,如果 Kerberos 失败,则退回到 NTLM。在大多数情况下,使用 SPNEGO 代替 Kerberos 或 NTLM,因此是否使用 Kerberos 还是 NTLM 完全取决于客户端是否可以获得 Kerberos 票证。
通常总是会尝试 Kerberos。当您登录加入域的计算机时,始终使用 Kerberos。NTLM 无需额外工作即可使用,因为它是您输入的凭据的产物。
| 归档时间: |
|
| 查看次数: |
10145 次 |
| 最近记录: |