• NTLM验证过程


    参考文献:

    Microsoft NTLM

    Kerberos连接过程

    正文

    NTLM有Interactive和Noninteractive两种,Interactive就是用户登录类型的,只有client和DC两个参与者,而Noninteractive则是Client要去连接一个Server。Microsoft NTLM给出了NTLM的Noninteractive验证过程,有如下7步过程:

    1. (Interactive authentication only) A user accesses a client computer and provides a domain name, user name, and password. The client computes a cryptographic hash of the password and discards the actual password.
    2. The client sends the user name to the server (in plaintext).
    3. The server generates a 16-byte random number, called a challenge or nonce, and sends it to the client.
    4. The client encrypts this challenge with the hash of the user's password and returns the result to the server. This is called the response.
    5. The server sends the following three items to the domain controller:

      • User name
      • Challenge sent to the client
      • Response received from the client
    6. The domain controller uses the user name to retrieve the hash of the user's password from the Security Account Manager database. It uses this password hash to encrypt the challenge.
    7. The domain controller compares the encrypted challenge it computed (in step 6) to the response computed by the client (in step 4). If they are identical, authentication is successful.

    但是其中有些地方不够详细,我在本文中加以补充。NTLM是windows验证的一种,其过程如下图所示:

    下面来详细解析NTLM验证过程,仍然是七步过程:

    1. 用户登录时输入的user name、password和domain name,然后Client端计算password的hash值并保存在本地
    2. 客户端将user name的明文发送给DC
    3. DC生成一个16-byte的随机数,叫做challenge,传输给client
    4. client收到challenge以后,在复制一份拷贝,然后将其中一个challenge用password hash加密,这个叫做response,然后将challenge,response以及user name传送给server
    5. server端在收到client传送过来的三份内容以后将它们转发给DC
    6. DC在收到user name,response,challenge以后,根据user name在account database中找到其对应的password hash,然后用这个password hash加密challenge
    7. 最后一步是客户端将response跟加密后的challenge进行比较,如果相同则NTLM验证成功。

    Microsoft NTLM的最后还提到了另外一点,就是让我们不要直接使用NTLM,而是使用negotiate。如果使用negotiate的话,那么windows会判断kerberos是否可用,如果可用就优先使用kerberos,否则使用NTLM。kerberos的安全性要比NTLM要高。

    在sharepoint的中就有NTLM和negotiate的选择,默认选择的是NTLM,如果知道如何配置kerberos的话,建议使用negotiate模式。

  • 相关阅读:
    如何快速且深入的学习一门新技术
    为什么说云原生会成为未来企业技术变迁的趋势
    高并发场景下锁的使用技巧
    开箱即用~基于.NET Core的敏捷开发框架规划
    为什么在做微服务设计的时候需要DDD?
    为什么我使用了索引,查询还是慢?
    解读中兴通信在物联网行业如何践行DDD
    服务发现技术是如何演进出来的?
    关于盘点和总结的那点事儿
    文件上传 通过 ServletContext.getRealPath()获取不到路径&war与war exploded的区别
  • 原文地址:https://www.cnblogs.com/xwdreamer/p/2652541.html
Copyright © 2020-2023  润新知