如何使用NTLM身份验证测试HTTP客户端?

ave*_*net 5 testing iis ntlm

我有一些代码充当HTTP客户端,支持基本身份验证以及NTLM身份验证.我可以通过要求用户名/密码访问.htaccessApache服务器上的文件来轻松测试基本身份验证的工作原理.但是,如何在不安装IIS的情况下测试NTLM身份验证?是否有任何机会接受NTLM身份验证的公共HTTP服务器?

Kev*_*Kev 5

您可能已经意识到,由于 NTLM 是一种专有身份验证协议(没有 Microsoft 提供的任何官方公共文档),因此您必须针对在 Windows 上运行的实际 IIS 服务器进行测试,或者您可以尝试使用从文档中收集的详细信息来模拟身份验证方案,例如:

HTTP 的 NTLM 身份验证方案

您不会在 Internet 上找到许多可供测试的公共 HTTP 服务器(如果有)。NTLM 身份验证通常部署供企业使用,例如针对 Active Directory 进行身份验证,并且通常锁定在公司 VPN 后面。

我会硬着头皮在虚拟机中启动一个 Windows 实例(Microsoft 让您下载大量 Windows 2008 的 120 天试用版等)并对其进行测试。


小智 5

我一直在寻找同样的问题(“如何设置 ntlm 代理虚拟服务器”)并找到了这个。所以这是我的解决方案,关于如何为代理服务器设置转发 NTLM 身份验证,而不使用 Microsoft 的 IIS 服务器。相反,我们将使用 Apache httpd.exe

  1. 下载 Apache HTTP 服务器 Apache 2.4.29。我使用了 ApacheHaus 的 windows 32bit (VC14) 版本的二进制文件
  2. 下载匹配的模块 Mod Auth NTLM,在我的例子中是 mod_authn_ntml-1.0.8-2.4.x-x86-vc14.zip
  3. 安装服务器和模块,并配置所有内容,以便服务器启动并在浏览本地主机时看到默认网页
  4. 现在再次编辑 conf/httpd.conf 配置文件,并进行以下更改:

    #Make sure to load at least the modules, and their dependencies:
    LoadModule headers_module modules/mod_headers.so
    LoadModule info_module modules/mod_info.so
    LoadModule ldap_module modules/mod_ldap.so
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_connect_module modules/mod_proxy_connect.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    LoadModule request_module modules/mod_request.so
    LoadModule rewrite_module modules/mod_rewrite.so
    LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
    LoadModule ssl_module modules/mod_ssl.so
    LoadModule status_module modules/mod_status.so
    
    #add the new module
    LoadModule auth_ntlm_module modules/mod_authn_ntlm.so
    
    Run Code Online (Sandbox Code Playgroud)

启用代理服务器。请注意,您可能会打开一个开放的代理服务器到互联网...

     ProxyVia On
     ProxyRequests On 

    <Proxy "*">
        AuthName "Private location"
    AuthType SSPI
    NTLMAuth On
    NTLMAuthoritative On
    <RequireAll>
        <RequireAny>
            Require valid-user
            #require sspi-user EMEA\group_name
        </RequireAny>
        <RequireNone>
            Require user "ANONYMOUS LOGON"
            Require user "NT-AUTORITÄT\ANONYMOUS-ANMELDUNG"
        </RequireNone>
    </RequireAll>
    </Proxy>
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想保护一个目录,您可以从 mod_authn_ntml 配置示例中复制代码:

  <Location /testDirectory >
    AuthName "Private location for testing NTLM authentication"
    AuthType SSPI
    NTLMAuth On
    NTLMAuthoritative On
    <RequireAll>
        <RequireAny>
            Require valid-user
            #require sspi-user EMEA\group_name
        </RequireAny>
        <RequireNone>
            Require user "ANONYMOUS LOGON"
            Require user "NT-AUTORITÄT\ANONYMOUS-ANMELDUNG"
        </RequireNone>
    </RequireAll>

    # use this to add the authenticated username to you header
    # so any backend system can fetch the current user
    # rewrite_module needs to be loaded then

     RewriteEngine On
     RewriteCond %{LA-U:REMOTE_USER} (.+)
     RewriteRule . - [E=RU:%1]
     RequestHeader set X_ISRW_PROXY_AUTH_USER %{RU}e

  </Location>
Run Code Online (Sandbox Code Playgroud)
  1. 要捕获本地环回流量并调试正在发生的事情,您需要安装 Wireshark 2.4.4,然后安装特殊的 npcap-0.97.exe loopback-capture 驱动程序。有了这个,您可以嗅探浏览器和本地网络服务器之间的流量

    1. 如果要对代理服务器使用 NTLM 身份验证,则需要遵循 mod_ntlmn_auth GitHub 页面的建议并在注册表中设置标志 DisableLoopbackCheck(请参阅https://support.microsoft.com/en-us/kb/ 896861 ),否则所有本地身份验证请求都将静默失败。

    2. 设置您的浏览器以使用您的本地 IP 地址作为代理服务器。如果一切正常,浏览器将在后台发送您的凭据。

    3. 要查看发生了什么,您现在可以检查您的 Wireshark 日志,Apache logs/access.log 还会显示用于身份验证的 Domain\User。

希望能帮助那里的人测试他们的代理脚本,因为我遇到的很多代理软件都无法正确处理 NTLM 代理,这在商业环境中很重要。