2009-09-26 8 views
5

Urllib2 nie obsługuje protokołu HTTPS z uwierzytelnianiem proxy ogólnie, a tym bardziej z uwierzytelnianiem NTLM. Każdy wie, czy jest gdzieś łatka dla HTTPS na proxy z uwierzytelnianiem NTLM.Python urllib2 Uwierzytelnianie HTTPS i proxy NTLM

Pozdrawiam,

Laurent

+0

FYI Teraz jest też [python-ntlm] (http://code.google.com/p/python-ntlm/) dla 'urllib2' –

Odpowiedz

5

Późna odpowiedź. Urllib2 nie obsługuje proxy NTLM, ale robi to pycurl. Fragment:

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/

nigdy nie próbowałem z HTTPS, ale myślę, że powinno działać.

EDYCJA: Jeśli korzystasz z tunelowania SSL, uwierzytelnianie serwera proxy jest złym pomysłem.

Serwer proxy używający uwierzytelniania podstawowego za pośrednictwem protokołu HTTPS nie jest bezpieczny podczas tunelowania protokołu SSL. Twoje hasło zostanie wysłane w sposób czytelny (kodowanie Base64) do proxy. Wiele osób zakłada, że ​​hasło będzie szyfrowane w SSL. W tym przypadku nie jest to prawdą.

Niemożliwe jest obsługiwanie innych zaszyfrowanych lub zakodowanych mechanizmów, takich jak Digest/NTLM, ponieważ wszystkie one wymagają negocjacji (wiele wymian) i nie jest to zdefiniowane w protokole CONNECT. Ta negocjacja odbywa się poza zakresem połączenia HTTP. Jest to bardzo trudne do wdrożenia również w proxy/przeglądarce.

Jeśli jest to korporacyjny serwer proxy, protokół IP ACL jest jedynym bezpiecznym rozwiązaniem.

+0

HTTPS nie działa z proxy przy użyciu uwierzytelniania w urllib2, ponieważ wydaje się, że żądanie CONNECT nie przekazuje poświadczeń. Miałem nadzieję, że ktoś ma łatkę dla HTTPS z serwerem proxy używającym NTLM. –

+0

Mówisz o tunelowaniu HTTPS (proxy CONNECT). To niemożliwe do przekazania referencji. Proxy pobiera host docelowy/port, a wszystko inne jest zaszyfrowane. Jedynym zabezpieczeniem, które można nałożyć na tunel, jest list ACL oparty na protokole IP. –

+0

W przypadku proxy z uwierzytelnianiem (podstawowe uwierzytelnienie na przykład), musisz przekazać poświadczenia w komendzie connect: "Proxy-Authorization: nazwa użytkownika/hasło" To jest tunel, ale nadal musisz uwierzytelnić się za pomocą proxy . –

1

Dobry przepis (dla HTTPS w/proxy) i dyskusja here, powinno być możliwe połączenie z kodem python-nltm @ZZ już zasugerował.

+0

Ten przepis działa dobrze w przypadku proxy bez uwierzytelniania. Nie działa w przypadku uwierzytelniania podstawowego, skrótów lub NTLM. Mamy do czynienia z podstawowym uwierzytelnianiem, ale szukamy pomocy w przypadku uwierzytelniania NTLM. –