没有密码的NTLM代理?

Nic*_*cue 35 authentication proxy curl ntlm sspi

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

然而,当我使用脚本/像卷曲或wget的方案,从http取东西,或者我的Java代码我似乎需要有地方存储我的密码,这显然不是最好的安全范围内做到这一点.

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

我主张这是一个堆栈溢出的问题,因为我是一个程序员,我需要我的程序/脚本,而无需在输入密码的工作,虽然我可以看到,别人可能会认为它属于在服务器故障/超级用户.

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

Nic*_*cue 47

在没有其他人的答案的情况下,这是我发现的,我希望它对其他人有用.

执行摘要:

  1. http://curl.haxx.se/latest.cgi?curl=win32-ssl下载SSPI启用的curl,更改为Windows,zip,启用SSL,启用SSPI(7.19.5).
  2. http://www.slproweb.com/products/Win32OpenSSL.html安装Windows Open-SSL 并进行捐赠以支持其带宽成本.
  3. 如果需要,请安装Visual C++ 2008可再发行组件.
  4. 使用curl获取页面: curl.exe -U : --proxy-ntlm --proxy myproxy.com:8080 http://www.google.com

更详细的解释

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

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

curl -v -V
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

curl.exe -U : --proxy-ntlm --proxy myproxy.com:8080 http://www.google.com
Run Code Online (Sandbox Code Playgroud)

-U :提供配置没有密码,其他的命令行选项设置代理.您可能需要更改代理和端口设置.

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


小智 7

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

curl -U = Authentication to a proxy
curl -u = Authentication to a server
Run Code Online (Sandbox Code Playgroud)

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

curl.exe -U : --proxy-ntlm --proxy myproxy.com:8080 http://www.google.com
Run Code Online (Sandbox Code Playgroud)

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

curl -v -u : --ntlm [the redirection URL from Location: header]  
Run Code Online (Sandbox Code Playgroud)

对于那个很抱歉!