36

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

但是,当我使用 curl 或 wget 之类的脚本/程序从 http 获取内容或在我的 Java 代码中执行此操作时,我似乎需要将密码存储在某个地方,这显然不是最好的安全性。

如何以编程方式获得 Internet Explorer 的无密码访问?

我认为这是一个堆栈溢出问题,因为我是一名程序员,我需要我的程序/脚本在不输入密码的情况下工作,尽管我可以看到其他人可能认为它属于服务器故障/超级用户。

我知道 curl 中的 --proxy-ntlm 之类的设置,但这仍然需要 ntlm 用户名和密码。

4

3 回答 3

48

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

执行摘要:

  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

如果支持 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 使用以下命令行:

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

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

如果只有 cygwin 的 curl 版本支持 SSPI,这一切都会容易得多。我现在就去提出请求。

于 2009-08-14T10:41:24.237 回答
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]  

对于那个很抱歉!

于 2012-10-19T13:55:46.923 回答
3

可能有点晚了,但还是想提一下。最初的问题通常是在用户已经登录的 Windows 上询问没有密码的 NTLM 代理身份验证。毫无疑问 curl 可以做到这一点,但我想提供另一种选择。

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

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

为了开发您自己的应用程序,代码还应该有助于弄清楚如何在 Python 以及可以访问 SSPI 的语言中做到这一点。

于 2016-08-19T19:58:28.217 回答