38 Stimmen

NTLM-Proxy ohne Passwort?

Ich arbeite in einem Windows-Firmennetz (bei dem ich mich anmelde) mit einem HTTP-Proxy. Wenn ich den Internet Explorer benutze, verwendet er auf magische Weise den Proxy, ohne dass ich mein Passwort eingeben muss. Bestimmte andere Programme scheinen dies auch zu können, z. B. hat JavaWebStart eine Option "Browsereinstellungen verwenden".

Wenn ich jedoch Skripte/Programme wie curl oder wget verwende, um Daten von http abzurufen, oder dies innerhalb meines Java-Codes tue, scheine ich mein Kennwort irgendwo gespeichert haben zu müssen, was natürlich nicht gerade sicher ist.

Wie kann ich den passwortlosen Zugang, den der Internet Explorer bietet, auf programmatische Weise erhalten?

Ich behaupte, dass dies eine Stack-Overflow-Frage ist, weil ich Programmierer bin und meine Programme/Skripte funktionieren müssen, ohne dass ich das Kennwort eingeben muss, obwohl ich sehen kann, dass andere denken könnten, dass es unter Server Fault/Superuser gehört.

Ich weiß von Einstellungen wie --proxy-ntlm in curl, aber das erfordert immer noch einen ntlm-Benutzernamen und ein Passwort.

50voto

Nick Fortescue Punkte 41671

In Ermangelung einer Antwort von jemand anderem hier ist, was ich entdeckt habe, ich hoffe, es ist nützlich für jemand anderen.

Zusammenfassung:

  1. Laden Sie SSPI-fähiges Curl herunter von http://curl.haxx.se/latest.cgi?curl=win32-ssl Wechsel zu Windows, zip, SSL-aktiviert, SSPI-aktiviert (7.19.5) .
  2. Installieren Sie Windows Open-SSL von http://www.slproweb.com/products/Win32OpenSSL.html und eine Spende zur Unterstützung seiner Bandbreitenkosten machen.
  3. Installieren Sie die Visual C++ 2008 weiterverteilbare Dateien wenn Sie sie brauchen.
  4. Verwenden Sie curl, um die Seite abzurufen: curl.exe -U : --proxy-ntlm --proxy myproxy.com:8080 http://www.google.com

Ausführlichere Erklärung

Die magische Phrase für die Authentifizierung über den Windows-Anmeldemechanismus lautet SSPI . Dies ist ein guter Suchbegriff für Google. Ich habe noch keine gute Möglichkeit gefunden, SSPI für die HTTP-Proxy-Authentifizierung in Java oder wget zu verwenden.

Allerdings, curl (das Download-Tool) tut unterstützen SSPI, aber nur in bestimmten Builds. Leider gehört der Standard-Cygwin-Build nicht dazu. Sie können herausfinden, ob Ihr Build von curl SSPI unterstützt, indem Sie die ausführlichen Versionsinformationen abrufen:

curl -v -V

Wenn SSPI unterstützt wird, wird dies in der Funktionszeile erwähnt.

Um eine Windows-Version zu erhalten, die SSPI unterstützt, musste ich zu http://curl.haxx.se/latest.cgi?curl=win32-ssl und ändern Sie dann die Download-Auswahl in Windows, zip, SSL-aktiviert, SSPI-aktiviert (7.19.5) . Wenn Sie dies lesen, kann sich die Versionsnummer bereits geändert haben.

Dies schlug dann in der Befehlszeile lautlos fehl. Bei der Ausführung über den Windows-Explorer erhielt ich eine Meldung über eine fehlende libeay32.dll. Eine Möglichkeit, diese von Windows aus zu erhalten, ist der einzige Link unter openssl.org zu einer Windows-Version . Der Hersteller bittet um eine Spende zur Deckung der Bandbreitenkosten. Eine andere Möglichkeit wäre, eine eigene Version aus den Quellen zu erstellen.

Und nach all dem funktionierte curl mit der folgenden Befehlszeile:

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

En -U : konfiguriert kein Passwort, die anderen Kommandozeilenoptionen richten den Proxy ein. Wahrscheinlich müssen Sie Ihre Proxy- und Porteinstellungen ändern.

Das wäre alles viel einfacher, wenn nur die curl-Version von cygwin SSPI unterstützen würde. Ich werde jetzt einen Antrag dafür stellen.

7voto

macartm Punkte 73

Bitte beachten Sie, dass mein Edit eine ungenaue Annahme über -U und -u enthält. Ich habe eine Korrektur eingereicht, aber in der Zwischenzeit beachten:

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

Daher sollte der erste Befehl lauten:

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

und die zweite, im Beispiel für transparentes NTLM:

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

Das tut mir leid!

4voto

genotrance Punkte 363

Es ist vielleicht ein bisschen spät, aber ich wollte es trotzdem erwähnen. Die ursprüngliche Frage ist allgemein über NTLM-Proxy-Auth ohne Passwörter auf Windows, wo Benutzer bereits angemeldet hat. Kein Zweifel, curl kann dies tun, aber ich wollte eine weitere Option zu geben.

NTLMAps und Cntlm sind Proxys, die die NTLM-Authentifizierung als zwischengeschaltete Proxys durchführen. Allerdings benötigen beide den Benutzer/Pass, da sie hauptsächlich auf Linux-Benutzer ausgerichtet sind. Ich habe diese Tools in der Vergangenheit unter Windows verwendet, war aber genervt von der gleichen Anforderung, die Anmeldeinformationen bereitstellen zu müssen.

Infolgedessen habe ich Folgendes verfasst Px für Windows ist ein HTTP-Proxy wie die beiden oben genannten, verwendet aber SSPI, um die erforderliche Authentifizierung mit dem Unternehmens-Proxy zu verwalten. Alles, was Sie konfigurieren müssen, ist der Proxy-Server und der Port. Dies ist hilfreich für bestehende Anwendungen, die nicht über NTLM-Proxys kommunizieren können, wie z. B. pip und npm.

Für die Entwicklung eigener Anwendungen sollte der Code auch dabei helfen, herauszufinden, wie man dies in Python und anderen Sprachen, die Zugang zu SSPI haben, tun kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X