代码之家  ›  专栏  ›  技术社区  ›  Nick Fortescue

没有密码的NTLM代理?

  •  34
  • Nick Fortescue  · 技术社区  · 16 年前

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

    然而,当我使用像CURL或WGET这样的脚本/程序从HTTP中获取东西时,或者在Java代码中执行它时,我似乎需要把密码存储在某个地方,这显然不是安全性最好的。

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

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

    我知道一些设置,比如--proxy ntlm in curl,但这仍然需要一个ntlm用户名和密码。

    3 回复  |  直到 9 年前
        1
  •  45
  •   psubsee2003 Miki Shah    13 年前

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

    执行摘要:

    1. 从下载启用SSPI的curl http://curl.haxx.se/latest.cgi?curl=win32-ssl 改为 Windows、Zip、启用SSL、启用SSPI(7.19.5) .
    2. 从安装Windows Open SSL http://www.slproweb.com/products/Win32OpenSSL.html 并捐款支持他的带宽成本。
    3. 安装 Visual C++ 2008 redistributables 如果你需要的话。
    4. 使用curl获取页面: curl.exe -U : --proxy-ntlm --proxy myproxy.com:8080 http://www.google.com

    更详细的解释

    使用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?卷曲= Win32 SSL 然后将下载选项更改为 Windows、Zip、启用SSL、启用SSPI(7.19.5) .当你读到这个的时候,版本号可能已经改变了。

    然后从命令行中静默地失败。从Windows资源管理器运行时,我收到一条关于libeay32.dll丢失的消息。从Windows获取此信息的一种方法是 openssl.org windows version . 这家公司要求捐款以支付带宽成本。另一种方法是从源代码构建自己的代码。

    之后,curl使用了以下命令行:

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

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

    如果只有Cygwin的curl发行版支持SSPI,这一切就容易多了。我现在就去申请。

        2
  •  7
  •   macartm    13 年前

    请注意,我的编辑包含一个关于-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]  
    

    对不起!

        3
  •  2
  •   genotrance    9 年前

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

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

    结果,我写了 Px for Windows 它是一个HTTP代理,与上面的两个类似,但使用SSPI管理公司代理所需的身份验证。您只需要配置代理服务器和端口。对于不能通过诸如PIP和NPM之类的NTLM代理进行通信的现有应用程序,它是有帮助的。

    为了开发自己的应用程序,代码还应该帮助您了解如何在Python中以及可能是可以访问SSPI的语言中实现这一点。

    推荐文章