2009-08-14 3 views
34

저는 HTTP 프록시를 사용하여 회사 Windows 네트워크 (내가 로그인하는 사이트)에서 작업합니다. 인터넷 익스플로러를 사용할 때 비밀리에 암호를 입력 할 필요없이 프록시를 사용합니다. 특정 다른 프로그램도이를 관리하는 것으로 보이며 JavaWebStart에는 "브라우저 설정 사용"옵션이 있습니다.NTLM 프록시?

그러나 컬이나 wget과 같은 스크립트/프로그램을 사용하여 http에서 물건을 가져 오거나 내 Java 코드에서 수행 할 때 암호가 어딘가에 저장되어 있어야합니다. 이는 분명 보안에 적합하지 않습니다.

인터넷 익스플로러가 프로그래밍 방식으로 어떻게 암호가없는 액세스 권한을 얻을 수 있습니까?

필자는 프로그래머이고 암호를 입력하지 않고도 작업 할 수 있도록 프로그램이 필요하기 때문에 스택 오버플로 문제라고 주장합니다. 다른 사람들이 서버 오류/수퍼 유저.

curl의 --proxy-ntlm과 같은 설정에 대해 알고 있지만 여전히 ntlm 사용자 이름과 비밀번호가 필요합니다.

+1

이 위대한 게시물에 대해 감사 드리기 위해 마침내 여기에 등록했습니다. 고맙습니다! OP 전용 스레드가 영원히 사라지면 좋을 것 같습니다 ... 나는 그들을 싫어합니다. 실제로 libcurl 정보를 찾고 curl util이 아니라 SSPI-hint가 정확한 방향을 제시했습니다. 앱에서 SSPI로 NTLM 인증을 활성화하는 방법에 관심이있는 사용자 : 1) libcurl 소스 다운로드 2) 평소대로 .dsw 파일 열기 3) 'libcurl'에 대한 프로젝트 설정에서 USE_WINDOWS_SSPI 매크로를 프리 프로세서 정의에 추가하십시오. 3 3) Build solution 그런 다음 프로그램에서 CURLAUTH_NTLM을 사용하여 빈 사용자 자격 증명을 –

답변

44

다른 누군가의 답변이 없으면 내가 발견 한 것이므로 다른 사람에게 유용하기를 바랍니다.

요약 : 윈도우로 변경 http://curl.haxx.se/latest.cgi?curl=win32-ssl에서

  1. 다운로드 SSPI 활성화 컬은, 우편은, SSL 사용은, (7.19.5)을 SSPI이 가능.
  2. http://www.slproweb.com/products/Win32OpenSSL.html에서 Windows Open-SSL을 설치하고 대역폭 비용을 지원하기위한 기부를하십시오.
  3. Visual C++ 2008 redistributables을 설치하십시오. curl.exe -U : --proxy-ntlm --proxy myproxy.com:8080 http://www.google.com

더 자세한 설명

Windows 로그인 메커니즘을 사용하여 인증을위한 마법의 구문 SSPI입니다 :

  • 사용 컬 페이지를 가져올 수 있습니다. 이것은 좋은 Google 검색 구문을 제공합니다. 나는 여전히 자바 또는 wget에서 HTTP 프록시 인증을 위해 SSPI를 사용하는 좋은 방법을 찾지 못했다.

    그러나 curl (the download tool)은 특정 빌드에서만 SSPI를 지원합니다. 불행하게도 기본 cygwin 빌드는 그 중 하나가 아닙니다.

    curl -v -V 
    

    을 SSPI는이 기능 라인에 언급 될 것입니다 지원되는 경우 : 컬의 빌드가 자세한 버전 정보를 얻어서 SSPI를 지원하는 경우 확인할 수 있습니다.

    내가 http://curl.haxx.se/latest.cgi?curl=win32-ssl로 이동 한 후 윈도우에 다운로드 선택을 변경했다 SSPI를 지원하는 윈도우 버전을 얻으려면, SSL 지원, (7.19.5) SSPI를 사용, 압축. 이 글을 읽으면서 버전 번호가 변경되었을 수 있습니다.

    이렇게하면 자동으로 명령 줄에서 실패합니다. Windows 탐색기에서 실행했을 때 누락 된 libeay32.dll에 대한 메시지가 나타납니다. Windows에서이 방법을 얻는 한 가지 방법은 openssl.org에서 windows version까지 유일한 링크입니다. 제작자는 대역폭 비용을 충당하기 위해 기부금을 요청합니다.또 다른 방법은 소스에서 자신을 구축하는 것입니다.

    그리고 모든 컬 후

    다음 명령 줄과 협력 :

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

    -U :는 암호, 프록시를 설정 다른 명령 줄 옵션을 구성합니다. 프록시 및 포트 설정을 변경해야 할 수도 있습니다.

    cygwin의 컬 릴리즈에서만 SSPI를 지원하면 훨씬 쉽습니다. 나는 지금 그것에 대한 요청을 할 것입니다.

  • +1

    Aha!로 설정할 수 있습니다. 나를위한 열쇠는'-U :'옵션이었습니다. –

    +1

    @NickFortescue : 로컬 프록시로 작동하고 NTLM을 통해 기업 프록시에 자신을 인증 할 수있는 유틸리티를 알고 있습니까? (따라서이를 지원하지 않는 지역 유틸리티가 인증없이 인터넷을 투명하게 사용할 수있게합니까?) Thanks –

    +1

    +1 NTLM에 로그인 한 사용자의 자격 증명을 사용하기위한'-u :'힌트를위한 +1. – wilx

    7

    제 편집문에 -U 및 -u에 대한 부정확 한 가정이 들어 있습니다. I는 보정을 전송했지만, 중간 메모 :

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

    따라서, 첫 번째 명령은 다음과 같아야

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

    및 제를 투명 NTLM 대한 예제에서

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

    죄송합니다.

    +0

    현재 승인 된 답변에 대한 수정 내용이 잘못되었다고 말하는 중입니까? – psubsee2003

    +0

    글쎄, 네,하지만 두 번째 수정안을 제출했지만 어딘가에 막혀 있거나 잃어버린 것 같습니다 :/ 내가 본 행동의 배경에는 더 복잡한 이유가 있습니다. 내가해야 할 일은 제 비트를 제거하고 제가 때때로 한 일을해야하는 이유에 대한 확장 된 대답을 추가하는 것입니다 ... 나는 앞으로 며칠 이내에 그 일을 마무리 할 것입니다. – macartm

    +1

    편집이 실제로 거부되었습니다 ... 일반적으로 코드를 편집하거나 답변을 크게 변경하는 편집이 거부되었습니다 (편집이 모두 수행됨). 적절한 조치는 잘못된 대답을 보는 이유를 설명하는 설명을 남기는 것입니다. 답변 포스터가 동의하면 변경 될 것입니다. 원래 편집을 롤백합니다. – psubsee2003

    2

    조금 늦었을 수도 있지만 그럼에도 불구하고 이것을 언급하고 싶습니다. 원래 질문은 일반적으로 사용자가 이미 로그인 한 Windows에서 암호가없는 NTLM 프록시 인증을 묻는 것입니다. 의심 할 여지없이 말릴 수 있지만 다른 옵션을 제공하고 싶습니다.

    NTLMAps 및 Cntlm은 중개 프록시로 NTLM 인증을 수행하는 프록시입니다. 그러나 대부분 사용자를 대상으로하기 때문에 사용자/패스가 필요합니다. 역사적으로 Windows에서 이러한 도구를 사용했지만 자격 증명을 제공해야한다는 동일한 요구 사항으로 인해 짜증을 냈습니다.

    결과적으로 위의 두 가지와 같은 HTTP 프록시 인 Px for Windows을 작성했지만 SSPI를 사용하여 회사 프록시에서 필요한 인증을 관리합니다. 구성 할 필요가있는 것은 프록시 서버와 포트뿐입니다. 예를 들어 pip 및 npm과 같은 NTLM 프록시를 통해 대화 할 수없는 기존 응용 프로그램에 유용합니다.

    자신의 응용 프로그램을 개발할 때이 코드는 Python에서이를 수행하는 방법과 SSPI에 액세스 할 수있는 언어를 파악하는데도 도움이됩니다.