35 votes

Proxy NTLM sans mot de passe?

Je travaille sur un réseau Windows d'entreprise (auquel je me connecte) avec un proxy HTTP. Lorsque j'utilise Internet Explorer, il utilise magiquement le proxy sans que j'aie besoin de taper mon mot de passe. Certains autres programmes semblent gérer cela aussi, comme JavaWebStart a une option "utiliser les paramètres du navigateur".

Cependant, lorsque j'utilise des scripts/programmes comme curl ou wget pour récupérer des éléments depuis http, ou le faire dans mon code Java, j'ai l'impression d'avoir besoin de stocker mon mot de passe quelque part, ce qui n'est évidemment pas idéal pour la sécurité.

Comment puis-je obtenir l'accès sans mot de passe de la manière dont Internet Explorer le fait de manière programmée ?

Je soutiens que c'est une question concernant stack overflow parce que je suis un programmateur et j'ai besoin que mes programmes/scripts fonctionnent sans taper le mot de passe, même si je comprends que d'autres pourraient penser qu'elle appartient à Server Fault/Superuser.

Je connais des paramètres comme --proxy-ntlm dans curl, mais cela nécessite toujours un nom d'utilisateur et un mot de passe ntlm.

47voto

Nick Fortescue Points 18829

En l'absence d'une réponse d'une autre personne, voici ce que j'ai découvert, j'espère que cela sera utile pour quelqu'un d'autre.

Résumé exécutif:

  1. Téléchargez curl activé SSPI depuis http://curl.haxx.se/latest.cgi?curl=win32-ssl en changeant pour Windows, zip, SSL-enabled, SSPI-enabled (7.19.5).
  2. Installez Windows Open-SSL depuis http://www.slproweb.com/products/Win32OpenSSL.html et faites un don pour soutenir ses coûts de bande passante.
  3. Installez les redistribuables Visual C++ 2008 si vous en avez besoin.
  4. Utilisez curl pour récupérer la page: curl.exe -U : --proxy-ntlm --proxy myproxy.com:8080 http://www.google.com

Explication plus détaillée

La phrase magique pour l'authentification en utilisant le mécanisme de connexion Windows est SSPI. Cela donne une bonne phrase de recherche sur Google. Je n'ai toujours pas trouvé de bonne manière d'utiliser SSPI pour l'authentification de proxy HTTP en java ou wget cependant.

Cependant, curl (l'outil de téléchargement) supporte SSPI mais uniquement dans certaines versions. Malheureusement, la version par défaut de cygwin n'en fait pas partie. Vous pouvez savoir si votre version de curl supporte SSPI en obtenant les informations de version verbose :

curl -v -V

Si SSPI est supporté, cela sera mentionné dans la ligne des fonctionnalités.

Pour obtenir une version Windows qui supporte SSPI, j'ai dû aller sur http://curl.haxx.se/latest.cgi?curl=win32-ssl puis changer le choix de téléchargement à Windows, zip, SSL-enabled, SSPI-enabled (7.19.5). Au moment où vous lirez ceci, le numéro de version aura peut-être changé.

Cela a échoué silencieusement en ligne de commande. Lorsque j'ai exécuté depuis l'explorateur Windows, j'ai reçu un message à propos d'un libeay32.dll manquant. Une manière de l'obtenir depuis Windows est depuis le seul lien sur openssl.org vers une version Windows. Le producteur de cela demande un don pour couvrir les coûts de bande passante. Une autre manière serait de construire votre propre version depuis les sources.

Et après tout cela, curl a fonctionné avec la commande suivante :

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

Le -U : configure aucun mot de passe, les autres options de ligne de commande configurent le proxy. Vous devrez probablement changer vos paramètres de proxy et de port.

Tout cela serait bien plus facile si seulement la version curl de cygwin supportait SSPI. Je vais faire une demande à ce sujet maintenant.

7voto

macartm Points 53

Veuillez noter que ma correction contient une hypothèse inexacte concernant -U et -u. J'ai soumis une correction, mais en attendant, notez :

curl -U = Authentification à un proxy
curl -u = Authentification à un serveur

Par conséquent, la première commande devrait être :

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

et la deuxième, dans l'exemple de NTLM transparent :

curl -v -u : --ntlm [l'URL de redirection à partir de l'en-tête Location:]

Désolé pour cela!

4voto

genotrance Points 171

Pourrait être un peu tard mais je voulais mentionner cela néanmoins. La question d'origine demande de manière générique des informations sur l'authentification proxy NTLM sans mot de passe sur Windows où l'utilisateur est déjà connecté. Sans aucun doute, curl peut le faire mais je voulais donner une autre option.

NTLMAps et Cntlm sont des proxies qui gèrent l'authentification NTLM en tant que proxy intermédiaire. Cependant, ils nécessitent tous les deux un nom d'utilisateur / mot de passe puisqu'ils sont principalement destinés aux utilisateurs de Linux. J'ai historiquement utilisé ces outils sur Windows mais j'étais agacé par la même exigence de devoir leur fournir les informations d'identification.

En conséquence, j'ai créé Px pour Windows qui est un proxy HTTP similaire aux deux mentionnés précédemment, mais utilise SSPI pour gérer l'authentification requise avec le proxy d'entreprise. Tout ce que vous devez configurer est le serveur proxy et le port. Cela peut être utile pour les applications existantes qui ne peuvent pas communiquer avec des proxies NTLM comme pip et npm par exemple.

Pour le développement de vos propres applications, le code devrait également vous aider à comprendre comment faire cela en Python et éventuellement dans d'autres langages qui ont accès à SSPI.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X