2009-09-26 75 views
5

似乎urllib2通常不支持使用代理身份验证的HTTPS,即使使用NTLM身份验证也不会。任何人都知道在NTLM身份验证代理上是否存在用于HTTPS的补丁。Python urllib2 HTTPS和代理NTLM身份验证

问候,

洛朗

+0

FYI现在也有[蟒蛇,NTLM(http://code.google.com/p/python-ntlm/)为'urllib2' – 2011-12-08 19:56:50

回答

5

最新回复。 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)) 
... 
2

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

我从来没有尝试过HTTPS,但我认为它应该工作。

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

当SSL隧道传输时,使用基于HTTPS的基本身份验证的代理服务器不安全。您的密码将以明文(Base64编码)发送至代理。许多人认为密码将在SSL内加密。这种情况并非如此。

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

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

+0

HTTPS不使用认证代理工作在urllib2中,因为它似乎CONNECT请求不通过凭据。我希望有人使用NTLM为代理提供HTTPS补丁。 – 2009-09-26 16:11:23

+0

您正在谈论HTTPS隧道(代理CONNECT)。这是不可能通过凭据。代理服务器仅获取目的主机/端口,其他所有内容都被加密您可以在隧道上施加的唯一安全性是基于IP的ACL。 – 2009-09-26 18:10:47

+0

如果是具有身份验证的代理(例如基本身份验证),则需要在connect命令中传递凭据: “代理 - 授权:用户名/密码哈希” 这是一个隧道,但您仍需要使用代理进行身份验证。 – 2009-09-26 19:02:02

1

好的配方(对于HTTPS w/proxy)和讨论here,应该可以用@ZZ已经提示的python-nltm代码来融合。

+0

该配方适用于没有身份验证的代理。它在基本,摘要或NTLM身份验证的情况下不起作用。我们从基本身份验证开始工作,但我们正在寻找一些NTLM身份验证的帮助。 – 2009-09-26 19:03:54