【问题标题】:How to test a HTTP client using NTLM authentication?如何使用 NTLM 身份验证测试 HTTP 客户端?
【发布时间】:2010-10-05 22:39:14
【问题描述】:

我有一些代码充当支持基本身份验证和 NTLM 身份验证的 HTTP 客户端。我可以通过要求用户名/密码访问 Apache 服务器上 .htaccess 中的文件来轻松测试基本身份验证是否有效。但是,除了安装 IIS,我如何测试 NTLM 身份验证?是否有任何接受 NTLM 身份验证的公共 HTTP 服务器?

【问题讨论】:

  • 你的代码是用什么写的,你用什么测试工具?
  • 我的代码是用 Java 编写的,我不一定需要自动化这部分测试。
  • 有 httpbin-ntlm.com 但现在离线了。见 github.com/shazow/urllib3/issues/242#issuecomment-24180808

标签: iis testing ntlm


【解决方案1】:

我正在寻找相同的问题(“如何设置 ntlm 代理虚拟服务器”)并找到了这个。所以这是我的解决方案,关于如何在不使用 Microsoft 的 IIS 服务器的情况下为代理服务器设置转发 NTLM 身份验证。相反,我们将使用 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
    

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

     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>

或者,如果您只想保护一个目录,您可以从 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>
  1. 要捕获本地环回流量并调试正在发生的事情,您需要安装 Wireshark 2.4.4,然后安装特殊的 npcap-0.97.exe 环回捕获驱动程序。有了这个,你可以嗅探浏览器和本地网络服务器之间的流量

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

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

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

【讨论】:

    【解决方案2】:

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

    NTLM Authentication Scheme for HTTP

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

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

    【讨论】:

      猜你喜欢
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多