2009-08-14 27 views
34

Yo trabajo en una red corporativa de Windows (que me conecto a) 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".Proxy NTLM sin contraseña?

Sin embargo, cuando uso scripts/programas como curl o wget para buscar cosas desde http, o hacerlo dentro de mi código 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 tiene Internet Explorer de manera 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 escribir la contraseña, aunque puedo ver que otros podrían pensar que pertenece a Server Fault/Superusuario

sé acerca de la configuración como --proxy-NTLM en rizo, pero esto todavía requiere una contraseña y nombre de usuario NTLM.

+1

Incluso me registré aquí finalmente para agradecerles por esta excelente publicación. ¡Gracias! Sería bueno si los hilos exclusivos de OP desaparecen para siempre ... Los odio. En realidad, estaba buscando información libcurl, no curl, pero su pista SSPI me dio la dirección correcta. Para quienes estén interesados ​​en habilitar la autenticación NTLM con SSPI en su aplicación: 1) Descargue fuentes de libcurl 2) Abra el archivo .dsw como de costumbre 3) Agregue la macro USE_WINDOWS_SSPI a sus definiciones de preprocesador en la configuración del proyecto para 'libcurl' 3) Solución de compilación Luego, en el programa, puede establecer solo las credenciales de usuario vacías con CURLAUTH_NTLM en –

Respuesta

44

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

Resumen Ejecutivo:

  1. Descargar SSPI rizo permitido cambiar de http://curl.haxx.se/latest.cgi?curl=win32-ssl a de Windows, cremallera, con SSL, SSPI activada (7.19.5).
  2. instalar Windows Abrir-SSL de http://www.slproweb.com/products/Win32OpenSSL.html y hacer una donación para apoyar a su costo de ancho de banda.
  3. Instalar el Visual C++ 2008 redistributables si los necesita.
  4. Use rizo para ir a buscar la página: explicación curl.exe -U : --proxy-ntlm --proxy myproxy.com:8080 http://www.google.com

más detallada

La frase mágica para la autenticación utilizando 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 (the download tool)hace admite SSPI pero solo en ciertas compilaciones. Lamentablemente, la compilación predeterminada de cygwin no es una de ellas. Puede averiguar si su acumulación de rizo apoya SSPI al obtener la información de versión detallada:

curl -v -V 

Si SSPI se admite que se menciona en la línea de características.

Para obtener una versión de Windows que apoyó SSPI que tenía que ir a http://curl.haxx.se/latest.cgi?curl=win32-ssl y luego cambiar a la opción de descargar de Windows, código postal, habilitado para SSL, SSPI activada (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 windows version. 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 comandos:

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

El -U : configura ninguna contraseña, las otras opciones de línea de comandos configurar 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 admite SSPI. Voy a ir a solicitarlo ahora.

+1

Aha! La clave para mí fue la opción '-U:'. –

+1

@NickFortescue: ¿Conoces alguna utilidad que pueda actuar como proxy local y pueda autenticarse en proxy corporativo a través de NTLM? (permitiendo así que las utilidades locales que no lo admiten utilicen Internet de forma transparente sin autenticación)? Gracias –

+1

+1 por la sugerencia de usar '-u:' para usar las credenciales del usuario registrado con NTLM. – wilx

7

Tenga en cuenta que mi edición contiene una suposición imprecisa 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] 

¡Disculpa!

+0

por lo que está diciendo que la edición que hizo a la respuesta aceptada actualmente era incorrecta? – psubsee2003

+0

Bueno, sí, y le envié una segunda corrección, pero parece haberse atascado o perdido en alguna parte ...:/ También parece que hay una razón más compleja detrás del comportamiento que estaba viendo. Lo que debería hacer es eliminar mi parte, y agregar una respuesta expandida de por qué tienes que hacer lo que hice a veces ... Lo haré en los próximos días. – macartm

+1

la edición fue rechazada en realidad ... normalmente se rechazan las ediciones o cambios que cambian significativamente las respuestas se rechazan (su edición hizo ambas cosas). La acción adecuada si ve una respuesta incorrecta es dejar un comentario explicando por qué cree que está mal. Si el póster de respuesta está de acuerdo, lo cambiará. Revertiré tu edición original – psubsee2003

2

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 de proxy de NTLM sin contraseñas en Windows donde el usuario ya ha iniciado sesión. Sin duda, curl puede hacerlo, pero quería dar otra opción.

NTLMAps y Cntlm son los 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 for 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.

Cuestiones relacionadas