2010-10-05 157 views
4

我有一些代碼充當HTTP客戶端,它支持基本身份驗證以及NTLM身份驗證。我可以通過要求用戶名/密碼來訪問Apache服務器上的.htaccess文件來輕鬆測試基本身份驗證的工作原理。但是,如何測試NTLM身份驗證,缺少安裝IIS?有沒有機會接受任何接受NTLM認證的公共HTTP服務器?如何使用NTLM身份驗證測試HTTP客戶端?

+0

你寫的代碼是什麼,你用的是什麼測試工具? – Kev 2010-10-05 23:02:18

+0

我的代碼是用Java編寫的,我不一定需要自動化那部分測試。 – avernet 2010-10-05 23:36:11

+1

有httpbin-ntlm.com,但現在不在線。見github.com/shazow/urllib3/issues/242#issuecomment-24180808 – 2014-10-06 17:02:21

回答

3

正如你可能已經意識到,因爲NTLM是一種專有的身份驗證協議(即沒有通過微軟提供的任何正式公開文件),你將不得不對實際的IIS服務器或者測試在Windows上運行或者你可以嘗試使用嘲弄細節從文檔中收集的身份驗證方案,如本:

NTLM Authentication Scheme for HTTP

你不會找到許多公共HTTP服務器(如果有的話)在互聯網上你將能夠測試。 NTLM身份驗證通常部署用於企業用途,例如針對Active Directory進行身份驗證,並且通常被鎖定在公司VPN的後面。

我硬着頭皮火起來的Windows的一個實例(微軟讓您下載大量的120天的Windows 2008等的試驗),在虛擬機和測試對抗。

0

我一直在尋找同樣的問題(「如何設置ntlm代理虛擬服務器」)並找到了它。因此,我的解決方案是關於如何爲代理服務器設置轉發NTLM身份驗證,而不使用Microsoft的IIS服務器。相反,我們將使用Apache httpd.exe

  1. 下載Apache HTTP服務器Apache 2.4.29。 我用Windows的32位來自ApacheHaus
  2. (VCl 4)版本的二進制文件下載匹配模塊Mod NTLM驗證了,在我的情況mod_authn_ntml-1.0.8-2.4.x-x86-vc14.zip
  3. 安裝服務器,和模塊,並配置一切都那麼服務器將啓動,你看到的默認網頁,當你瀏覽到localhost
  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環回捕獲驅動程序。有了這個,你可以嗅探你的瀏覽器和本地Web服務器之間的流量

  2. 如果您想使用NTLM身份驗證的代理服務器,您將需要遵循的建議從mod_ntlmn_auth GitHub頁面並在註冊表中設置標誌DisableLoopbackCheck(請參閱https://support.microsoft.com/en-us/kb/896861),否則所有本地身份驗證請求都將以靜默方式失敗。

  3. 設置瀏覽器使用本地IP地址作爲代理服務器。如果一切正常,瀏覽器將在後臺發送憑證。

  4. 要查看正在發生的事情,現在可以檢查Wireshark日誌,並且Apache日誌/ access.log也會顯示用於身份驗證的Domain \ User。

希望幫助別人那裏,以測試他們的代理腳本,因爲很多代理軟件的我遇到不能正確處理NTLM代理,這是在商業環境中非常重要。

相關問題