2009-09-26 8 views
5

urllib2 ne semble pas prendre en charge HTTPS avec l'authentification proxy en général, encore moins avec l'authentification NTLM. Tout le monde sait s'il existe un patch quelque part pour HTTPS sur proxy avec l'authentification NTLM.Python urllib2 Authentification HTTPS et proxy NTLM

Cordialement,

Laurent

+0

Pour votre information Maintenant, il y a aussi (http://code.google.com/p/python-ntlm/) pour 'urllib2' –

Répondre

5

Réponse tardive. Urllib2 ne prend pas en charge le proxy NTLM mais pycurl. Extrait:

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/

Je ne ai jamais essayé avec HTTPS, mais je pense que cela devrait fonctionner.

EDIT: Si vous utilisez SSL Tunneling, l'authentification par proxy est une mauvaise idée.

Le proxy utilisant Basic Auth sur HTTPS n'est pas sécurisé lorsque le protocole SSL est mis en tunnel. Votre mot de passe sera envoyé en clair (encodé en Base64) au proxy. Beaucoup de personnes supposent que le mot de passe sera crypté dans SSL. Ce n'est pas vrai dans ce cas.

Il est presque impossible de prendre en charge d'autres mécanismes cryptés ou hachés comme Digest/NTLM car ils nécessitent tous une négociation (échanges multiples) et cela n'est pas défini dans le protocole CONNECT. Cette négociation se produit hors de la bande de la connexion HTTP. C'est très difficile à implémenter dans proxy/browser aussi.

S'il s'agit d'un proxy d'entreprise, IP ACL est la seule solution sécurisée.

+0

HTTPS [python-NTLM] ne fonctionne pas avec proxy en utilisant l'authentification dans urllib2 car il semble que la requête CONNECT ne passe pas les informations d'identification. J'espérais que quelqu'un avait un patch pour HTTPS avec proxy en utilisant NTLM. –

+0

Vous parlez de tunneling HTTPS (proxy CONNECT). C'est impossible de transmettre des informations d'identification. Le proxy reçoit uniquement l'hôte/port de destination et tout le reste est chiffré. La seule sécurité que vous pouvez imposer à un tunnel est une ACL basée sur IP. –

+0

En cas de proxy avec authentification (authentification de base par exemple), vous devez passer les informations d'identification dans la commande connect: "Proxy-Authorization: nom d'utilisateur/mot de passe hashed" Il s'agit d'un tunnel mais vous devez vous authentifier avec le proxy . –

1

Bonne recette (pour HTTPS w/proxy) et la discussion here, il devrait être possible de fusionner cela avec le code python-nltm @ZZ a déjà suggéré.

+0

Cette recette fonctionne bien en cas de proxy sans authentification. Cela ne fonctionne pas en cas d'authentification de base, digest ou NTLM. Nous l'avons pour l'authentification de base, mais nous cherchons de l'aide en cas d'authentification NTLM. –

Questions connexes