没有密码的NTLM代理?

时间:2009-08-14 09:41:37

标签: authentication proxy curl ntlm sspi

我使用HTTP代理在公司Windows网络(我登录)上工作。当我使用Internet Explorer时,它神奇地使用代理而无需输入我的密码。某些其他程序似乎也管理这个,例如JavaWebStart有一个“使用浏览器设置”选项。

然而,当我使用像curl或wget这样的脚本/程序来从http获取内容,或者在我的Java代码中执行它时,我似乎需要将我的密码存储在某处,这显然不是最好的安全性。

如何以编程方式获取Internet Explorer具有的无密码访问权限?

我认为这是一个堆栈溢出问题,因为我是程序员而且我需要我的程序/脚本才能在不输入密码的情况下工作,尽管我可以看到其他人可能认为它属于Server Fault / Superuser。

我知道像curl中的--proxy-ntlm这样的设置,但是这仍然需要一个ntlm用户名和密码。

3 个答案:

答案 0 :(得分:46)

如果没有其他人的答案,我发现了这个,我希望它对其他人有用。

执行摘要:

  1. http://curl.haxx.se/latest.cgi?curl=win32-ssl下载支持SSPI的卷曲更改为 Windows,zip,启用SSL,启用SSPI(7.19.5)
  2. http://www.slproweb.com/products/Win32OpenSSL.html安装Windows Open-SSL并捐款以支持其带宽费用。
  3. 如果您需要,请安装Visual C++ 2008 redistributables
  4. 使用curl获取页面:curl.exe -U : --proxy-ntlm --proxy myproxy.com:8080 http://www.google.com
  5. 更详细的解释

    使用Windows登录机制进行身份验证的神奇短语是 SSPI 。这给了一个很好的谷歌搜索短语。我仍然没有找到一种在Java或wget中使用SSPI进行HTTP代理身份验证的好方法。

    但是,curl (the download tool) 支持支持SSPI,但仅限于某些版本。不幸的是,默认的cygwin构建不是其中之一。您可以通过获取详细版本信息来了解您的curl构建是否支持SSPI:

    curl -v -V
    

    如果支持SSPI,将在功能行中提及。

    要获得支持SSPI的Windows版本,我必须转到http://curl.haxx.se/latest.cgi?curl=win32-ssl,然后将下载选项更改为 Windows,zip,启用SSL,启用SSPI(7.19.5)。当您阅读本文时,版本号可能已更改。

    然后从命令行静默失败。当我从Windows资源管理器运行时,我收到一条消息,说明缺少libeay32.dll。从Windows获取此功能的一种方法是从openssl.orgwindows version的唯一链接。该生产商要求捐赠以支付带宽成本。另一种方法是从源代码构建自己的。

    毕竟卷曲使用以下命令行:

    curl.exe -U : --proxy-ntlm --proxy myproxy.com:8080 http://www.google.com
    

    -U :不配置密码,其他命令行选项设置代理。您可能需要更改代理和端口设置。

    如果只有cygwin的curl版本支持SSPI,这将更加容易。我现在要提出要求。

答案 1 :(得分:7)

请注意我的编辑包含有关-U和-u的不准确假设。我已提交更正,但在临时说明中:

curl -U = Authentication to a proxy
curl -u = Authentication to a server

因此,第一个命令应该是:

curl.exe -U : --proxy-ntlm --proxy myproxy.com:8080 http://www.google.com

和第二个,在透明NTLM的例子中:

curl -v -u : --ntlm [the redirection URL from Location: header]  

对此感到抱歉!

答案 2 :(得分:2)

可能有点迟了但是想提到这一点。最初的问题是在用户已登录的Windows上一般性地询问NTLM代理身份验证而没有密码。毫无疑问,卷曲可以做到这一点,但我想提供另一种选择。

NTLMAps和Cntlm是将NTLM身份验证作为中间代理的代理。但是,它们都需要用户/通行证,因为它们主要针对Linux用户。我历史上曾在Windows上使用过这些工具,但对于必须向他们提供凭据的相同要求感到恼火。

因此,我创作了Px for Windows这是一个类似于上述两者的HTTP代理,但使用SSPI来管理公司代理所需的身份验证。您需要配置的只是代理服务器和端口。它有助于现有的无法通过NTLM代理进行通信的应用程序,例如pip和npm。

为了开发自己的应用程序,代码还应该有助于弄清楚如何在Python中执行此操作以及可能访问SSPI的语言。