authentication proxy curl ntlm sspi

authentication - Proxy NTLM sin contraseña?



curl sspi (3)

Trabajo en una red corporativa de Windows (con la que inicio sesión) con un proxy HTTP. Cuando uso Internet Explorer mágicamente usa el proxy sin que necesite escribir mi contraseña. Algunos otros programas parecen gestionar esto también, como JavaWebStart tiene una opción de "usar la configuración del navegador".

Sin embargo, cuando uso scripts / programas como curl o wget para recuperar cosas de http, o hacerlo dentro de mi código de Java, parece que necesito tener mi contraseña almacenada en alguna parte, lo que obviamente no es lo mejor para la seguridad.

¿Cómo puedo obtener el acceso sin contraseña que Internet Explorer tiene de forma programática?

Estoy argumentando que esta es una pregunta de desbordamiento de pila porque soy un programador y necesito que mis programas / scripts funcionen sin ingresar la contraseña, aunque puedo ver que otros pueden pensar que pertenece a Server Fault / Superuser.

Sé acerca de configuraciones como --proxy-ntlm en curl, pero esto todavía requiere un nombre de usuario y contraseña ntlm.


En ausencia de una respuesta de otra persona aquí es lo que he descubierto, espero que sea útil para otra persona.

Resumen ejecutivo:

  1. Descargue el curl habilitado para SSPI desde http://curl.haxx.se/latest.cgi?curl=win32-ssl cambiando a Windows, zip, SSL-enabled, SSPI-enabled (7.19.5) .
  2. Instale Windows Open-SSL desde http://www.slproweb.com/products/Win32OpenSSL.html y haga una donación para soportar su costo de ancho de banda.
  3. Instale los redistribuibles de Visual C ++ 2008 si los necesita.
  4. Use curl para buscar la página: curl.exe -U : --proxy-ntlm --proxy myproxy.com:8080 http://www.google.com

Explicación más detallada

La frase mágica para la autenticación mediante el mecanismo de inicio de sesión de Windows es SSPI . Esto da una buena frase de búsqueda de Google. Todavía no he encontrado una buena manera de usar SSPI para autenticación de proxy HTTP en java o wget.

Sin embargo, curl (la herramienta de descarga) es compatible con SSPI, pero solo en ciertas compilaciones. Lamentablemente, la compilación predeterminada de cygwin no es una de ellas. Puede averiguar si su compilación de curl admite SSPI obteniendo la información de versión detallada:

curl -v -V

Si se admite SSPI, se mencionará en la línea de características.

Para obtener una versión de Windows que admitía SSPI, tenía que ir a http://curl.haxx.se/latest.cgi?curl=win32-ssl y luego cambiar la opción de descarga a Windows, zip, SSL habilitado, SSPI habilitado (7.19.5) . En el momento de leer esto, el número de versión puede haber cambiado.

Esto luego silenciosamente falló desde la línea de comando. Cuando me escapé del explorador de Windows, recibí un mensaje sobre la pérdida de libeay32.dll. Una forma de obtener esto desde Windows es desde el único enlace en openssl.org a una http://www.slproweb.com/products/Win32OpenSSL.html . El productor de este solicita una donación para cubrir los costos de ancho de banda. Otra forma sería construir tu propia fuente.

Y después de todo ese rizo trabajó con la siguiente línea de comando:

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

-U : no configura ninguna contraseña, las otras opciones de línea de comando configuran el proxy. Probablemente tengas que cambiar la configuración de tu proxy y tu puerto.

Todo esto sería mucho más fácil si solo la versión curl de cygwin soportara SSPI. Voy a ir a solicitarlo ahora.


Podría ser un poco tarde, pero quería mencionar esto, no obstante. La pregunta original es preguntar de forma genérica acerca de la autenticación proxy NTLM sin contraseñas en Windows donde el usuario ya ha iniciado sesión. Sin duda Curl puede hacer esto, pero quería dar otra opción.

NTLMAps y Cntlm son proxies que hacen la autenticación NTLM como un proxy intermediario. Sin embargo, ambos requieren el usuario / pase ya que están dirigidos principalmente a usuarios de Linux. Históricamente utilicé estas herramientas en Windows pero me molestó el mismo requisito de tener que proporcionarles las credenciales.

Como resultado, he creado Px para Windows, que es un proxy HTTP como los dos anteriores, pero usa SSPI para administrar la autenticación requerida con el proxy corporativo. Todo lo que necesita configurar es el servidor proxy y el puerto. Ayuda para las aplicaciones existentes que no pueden hablar a través de proxies NTLM como pip y npm, por ejemplo.

Para desarrollar sus propias aplicaciones, el código también debería ayudar a descubrir cómo hacerlo en Python y quizás en los idiomas que tienen acceso a SSPI.


Tenga en cuenta que mi edición contiene una suposición inexacta sobre -U y -u. He presentado una corrección, pero en la nota provisional:

curl -U = Authentication to a proxy curl -u = Authentication to a server

Por lo tanto, el primer comando debería ser:

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

y el segundo, en el ejemplo de NTLM transparente:

curl -v -u : --ntlm [the redirection URL from Location: header]

¡Lo siento por eso!