2009-08-14 20 views
34

Pracuję w korporacyjnej sieci Windows (z której loguję się) za pomocą serwera proxy HTTP. Kiedy używam przeglądarki Internet Explorer, magicznie korzysta z proxy bez konieczności wpisywania mojego hasła. Wygląda na to, że niektóre inne programy również to zarządzają, tak jak JavaWebStart ma opcję "użyj ustawień przeglądarki".NTLM proxy bez hasła?

Jednak kiedy używam skryptów/programów takich jak curl lub wget do pobierania rzeczy z http, lub robię to w ramach mojego kodu Java, wydaje mi się, że muszę przechowywać moje hasło gdzieś, co oczywiście nie jest najlepsze dla bezpieczeństwa.

Jak mogę uzyskać dostęp bez hasła, który program Internet Explorer ma programowo?

Twierdzę, że jest to pytanie przepełnione stosem, ponieważ jestem programistą i potrzebuję, aby moje programy/skrypty działały bez wpisywania hasła, chociaż widzę, że inni mogą sądzić, że należy on do błędu serwera/Superuser.

Wiem o ustawieniach takich jak --proxy-ntlm in curl, ale nadal wymaga to nazwy użytkownika i hasła ntlm.

+1

Nawet się tu zarejestrowałem, aby ci podziękować za ten wspaniały post. Dziękuję Ci! Byłoby dobrze, gdyby nici tylko OP zniknęły na zawsze ... Nienawidzę ich. Właściwie to szukałem informacji o libcurl, a nie curl, ale twoja wskazówka SSPI dała mi właściwy kierunek. Dla tych, którzy są zainteresowani włączeniem autoryzacji NTLM przy pomocy SSPI w twojej aplikacji: 1) Pobierz źródła libcurl 2) Otwórz plik .dsw jak zwykle 3) Dodaj makro USE_WINDOWS_SSPI do definicji preprocesora w ustawieniach projektu dla 'libcurl' 3) Zbuduj rozwiązanie Następnie w programie możesz ustawić tylko puste poświadczenia użytkownika przy pomocy CURLAUTH_NTLM w Aha, –

Odpowiedz

44

Pod nieobecność odpowiedzi od kogoś tutaj jest to, co odkryłem, mam nadzieję, że przyda się komuś innemu.

Streszczenie:

  1. Pobierz SSPI włączona curl z http://curl.haxx.se/latest.cgi?curl=win32-ssl zmieniających się Windows, zip, SSL-włączone, SSPI obsługą (7.19.5).
  2. Zainstaluj Windows Open-SSL od http://www.slproweb.com/products/Win32OpenSSL.html i zrób darowiznę na wsparcie swojego kosztu przepustowości.
  3. Zainstaluj urządzenie Visual C++ 2008 redistributables, jeśli jest to potrzebne.
  4. Stosować zwijają się pobrać strony: curl.exe -U : --proxy-ntlm --proxy myproxy.com:8080 http://www.google.com

Bardziej szczegółowe wyjaśnienie

Magiczna fraza uwierzytelniania przy użyciu mechanizmu logowania systemu Windows jest SSPI. Daje to dobrą frazę wyszukiwania google. Nadal nie znalazłem dobrego sposobu używania SSPI do uwierzytelniania proxy HTTP w java lub wget.

Jednak curl (the download tool)ma obsługuje SSPI, ale tylko w niektórych kompilacjach. Niestety domyślna kompilacja cygwin nie jest jedną z nich. Można dowiedzieć się, czy kompilacji zwinięcie obsługuje SSPI dostając z informacją pełną wersję:

curl -v -V 

Jeśli SSPI jest obsługiwana będzie wspomniane w wierszu funkcji.

Aby uzyskać wersję systemu Windows, która obsługiwana SSPI musiałem iść do http://curl.haxx.se/latest.cgi?curl=win32-ssl a następnie zmienić wybór pobierania do Windows, zip, SSL-włączone, SSPI-włączona (7.19.5). Zanim to przeczytasz, numer wersji może się zmienić.

To następnie po cichu zepsuło z linii poleceń. Po uruchomieniu z Eksploratora Windows dostałem wiadomość o brakującym pliku libeay32.dll. Jednym ze sposobów uzyskania tego z okna jest od jedynego linku pod numerem openssl.org do windows version. Producent tego żąda darowizny na pokrycie kosztów związanych z przepustowością.Innym sposobem byłoby zbudowanie własnego ze źródła.

I po tym wszystkim, curl pracował w następującym wierszu poleceń:

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

-U : nie konfiguruje hasło, inne opcje wiersza polecenia skonfigurować serwer proxy. Prawdopodobnie będziesz musiał zmienić ustawienia serwera proxy i portu.

To wszystko byłoby o wiele łatwiejsze, gdyby tylko zwolnienie curlingu Cygwin wspierało SSPI. Zamierzam teraz złożyć wniosek w tej sprawie.

+1

. Kluczem dla mnie była opcja '-U:'. –

+1

@NickFortescue: Czy znasz jakieś narzędzie, które może działać jako lokalny serwer proxy i może uwierzytelniać się w korporacyjnym proxy za pośrednictwem NTLM? (w ten sposób pozwalając lokalnym narzędziom, które nie obsługują go, aby korzystać z Internetu w sposób przejrzysty bez uwierzytelniania)? Dziękujemy –

+1

+1 za podpowiedź użycia '-u:' do używania poświadczeń zalogowanego użytkownika w NTLM. – wilx

7

Uwaga: moja edycja zawiera niedokładne założenie dotyczące -U i -u. I złożyli korektę, ale w nocie okresowego:

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

Dlatego pierwsze polecenie powinno być:

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

a drugi, w przykładzie na przezroczystej NTLM:

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

Przepraszam za to!

+0

, więc twierdzisz, że edytowana przez ciebie obecnie odpowiedź była błędna? – psubsee2003

+0

Cóż, tak, i przedstawiłem drugą poprawkę, ale wydaje się, że utknęło lub gdzieś zginęło ...:/ Wydaje się również, że istnieje bardziej złożony powód takiego zachowania, jakie widziałem. To, co powinienem zrobić, to usunąć mój kawałek i dodać rozszerzoną odpowiedź, dlaczego musisz robić to, co robiłem ... Przejdę do tego w ciągu najbliższych kilku dni. – macartm

+1

Edycja została odrzucona w rzeczywistości ... zwykle edytuje kod lub zmiany, które znacząco zmieniają odpowiedzi, są odrzucane (twoja edycja dokonała obu). Odpowiednią akcją, jeśli widzisz złą odpowiedź, jest pozostawienie komentarza wyjaśniającego, dlaczego uważasz, że jest błędne. Jeśli plakat odpowiedzi się zgadza, on/ona to zmieni. Zwrócę Twoją oryginalną zmianę – psubsee2003

2

Może być nieco za późno, ale mimo to chciałem o tym wspomnieć. Pierwotne pytanie jest generalnie pytanie o uwierzytelnianie proxy NTLM bez haseł w systemie Windows, gdzie użytkownik już się zalogował. Bez wątpienia curl może to zrobić, ale chciałem dać inną opcję.

NTLMAps i Cntlm są serwerami proxy, które wykonują uwierzytelnianie NTLM jako proxy pośredniczące. Oba wymagają jednak użytkownika/hasła, ponieważ są skierowane głównie do użytkowników systemu Linux. Historycznie używałam tych narzędzi w systemie Windows, ale irytował mnie ten sam wymóg, by musiałem im podawać referencje.

W rezultacie utworzyłem Px for Windows, który jest serwerem proxy HTTP podobnym do powyższych dwóch, ale używa SSPI do zarządzania wymaganym uwierzytelnianiem z korporacyjnym proxy. Wszystko, co musisz skonfigurować, to serwer proxy i port. Pomaga w przypadku istniejących aplikacji, które nie mogą rozmawiać przez proxy NTLM, na przykład pip i npm.

Aby rozwijać własne aplikacje, kod powinien również pomóc w zrozumieniu, jak to zrobić w Pythonie i być może w językach, które mają dostęp do SSPI.