我有一些代码充当HTTP客户端,支持基本身份验证以及NTLM身份验证.我可以通过要求用户名/密码访问.htaccessApache服务器上的文件来轻松测试基本身份验证的工作原理.但是,如何在不安装IIS的情况下测试NTLM身份验证?是否有任何机会接受NTLM身份验证的公共HTTP服务器?
您可能已经意识到,由于 NTLM 是一种专有身份验证协议(没有 Microsoft 提供的任何官方公共文档),因此您必须针对在 Windows 上运行的实际 IIS 服务器进行测试,或者您可以尝试使用从文档中收集的详细信息来模拟身份验证方案,例如:
您不会在 Internet 上找到许多可供测试的公共 HTTP 服务器(如果有)。NTLM 身份验证通常部署供企业使用,例如针对 Active Directory 进行身份验证,并且通常锁定在公司 VPN 后面。
我会硬着头皮在虚拟机中启动一个 Windows 实例(Microsoft 让您下载大量 Windows 2008 的 120 天试用版等)并对其进行测试。
小智 5
我一直在寻找同样的问题(“如何设置 ntlm 代理虚拟服务器”)并找到了这个。所以这是我的解决方案,关于如何为代理服务器设置转发 NTLM 身份验证,而不使用 Microsoft 的 IIS 服务器。相反,我们将使用 Apache httpd.exe
现在再次编辑 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)
要捕获本地环回流量并调试正在发生的事情,您需要安装 Wireshark 2.4.4,然后安装特殊的 npcap-0.97.exe loopback-capture 驱动程序。有了这个,您可以嗅探浏览器和本地网络服务器之间的流量
如果要对代理服务器使用 NTLM 身份验证,则需要遵循 mod_ntlmn_auth GitHub 页面的建议并在注册表中设置标志 DisableLoopbackCheck(请参阅https://support.microsoft.com/en-us/kb/ 896861 ),否则所有本地身份验证请求都将静默失败。
设置您的浏览器以使用您的本地 IP 地址作为代理服务器。如果一切正常,浏览器将在后台发送您的凭据。
要查看发生了什么,您现在可以检查您的 Wireshark 日志,Apache logs/access.log 还会显示用于身份验证的 Domain\User。
希望能帮助那里的人测试他们的代理脚本,因为我遇到的很多代理软件都无法正确处理 NTLM 代理,这在商业环境中很重要。
| 归档时间: |
|
| 查看次数: |
9181 次 |
| 最近记录: |