【问题标题】:Python urllib2 HTTPS and proxy NTLM authenticationPython urllib2 HTTPS 和代理 NTLM 身份验证
【发布时间】:2010-12-01 16:05:38
【问题描述】:

urllib2 通常似乎不支持带有代理身份验证的 HTTPS,更不支持 NTLM 身份验证。任何人都知道是否有针对具有 NTLM 身份验证的代理上的 HTTPS 的补丁。

问候,

劳伦特

【问题讨论】:

标签: python authentication proxy https ntlm


【解决方案1】:

http://code.google.com/p/python-ntlm/

我从未尝试过使用 HTTPS,但我认为它应该可以工作。

编辑:如果您使用 SSL 隧道,代理身份验证是个坏主意。

通过 HTTPS 使用基本身份验证的代理在 SSL 建立隧道时不安全。您的密码将以明文(Base64 编码)形式发送到代理。很多人认为密码将在 SSL 中加密。在这种情况下,情况并非如此。

几乎不可能支持其他加密或散列机制,例如 Digest/NTLM,因为它们都需要协商(多次交换),而 CONNECT 协议中没有定义。这种协商发生在 HTTP 连接的带外。在代理/浏览器中也很难实现。

如果这是企业代理,IP ACL 是唯一安全的解决方案。

【讨论】:

  • HTTPS 不适用于在 urllib2 中使用身份验证的代理,因为似乎 CONNECT 请求未通过凭据。我希望有人使用 NTLM 为带有代理的 HTTPS 提供补丁。
  • 您在谈论 HTTPS 隧道(代理 CONNECT)。这是不可能通过凭据的。代理仅获取目标主机/端口,其他所有内容均已加密。您可以对隧道施加的唯一安全措施是基于 IP 的 ACL。
  • 如果代理带身份验证(例如基本身份验证),您需要在连接命令中传递凭据:“Proxy-Authorization: username/password hashed” 这是一个隧道,但您仍然需要使用代理进行身份验证。
【解决方案2】:

很好的秘诀(用于带有代理的 HTTPS)和讨论 here,应该可以将其与 @ZZ 已经建议的 python-nltm 代码融合。

【讨论】:

  • 该配方适用于没有身份验证的代理。它不适用于基本、摘要或 NTLM 身份验证。我们让它在基本身份验证中工作,但我们正在寻找一些帮助,以防 NTLM 身份验证。
【解决方案3】:

迟到的回复。 Urllib2 不支持 NTLM 代理,但 pycurl 支持。摘录:

self._connection = pycurl.Curl()
self._connection.setopt(pycurl.PROXY, PROXY_HOST)
self._connection.setopt(pycurl.PROXYPORT, PROXY_PORT)
self._connection.setopt(pycurl.PROXYUSERPWD,
                        "%s:%s" % (PROXY_USER, PROXY_PASS))
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多