web-dev-qa-db-ja.com

パスワードなしのNTLMプロキシ?

私は、HTTPプロキシを使用して(ログインする)企業のWindowsネットワークで作業しています。 Internet Explorerを使用すると、パスワードを入力しなくても魔法のようにプロキシが使用されます。 JavaWebStartに「ブラウザ設定を使用する」オプションがあるように、他の特定のプログラムもこれを管理しているようです。

ただし、curlやwgetなどのスクリプト/プログラムを使用してhttpからデータを取得する場合、またはJavaコード内で実行する場合、パスワードをどこかに保存する必要があるようですが、これは明らかに最良ではありません。セキュリティのため。

プログラムからInternet Explorerのパスワードなしのアクセスを取得するにはどうすればよいですか?

私はプログラマーであり、パスワードを入力せずにプログラム/スクリプトを機能させる必要があるため、これはスタックオーバーフローの質問であると主張していますが、他の人がサーバーフォールト/スーパーユーザーに属していると考えるかもしれません。

Curlの--proxy-ntlmのような設定については知っていますが、これにはまだntlmユーザー名とパスワードが必要です。

35
Nick Fortescue

私が発見したのは、ここに誰か他の人からの回答がない場合で、他の誰かに役立つことを願っています。

エグゼクティブサマリー:

  1. http://curl.haxx.se/latest.cgi?curl=win32-ssl からWindows、Zip、SSL対応、 SSPI対応(7.19.5)
  2. http://www.slproweb.com/products/Win32OpenSSL.html からWindows Open-SSLをインストールし、彼の帯域幅コストをサポートするための寄付をしてください。
  3. 必要に応じて Visual C++ 2008再頒布可能ファイル をインストールします。
  4. Curlを使用してページを取得します:curl.exe -U : --proxy-ntlm --proxy myproxy.com:8080 http://www.google.com

より詳細な説明

Windowsログインメカニズムを使用した認証の魔法のフレーズは、[〜#〜] sspi [〜#〜]です。これは良いグーグル検索フレーズを与えます。 Javaまたはwgetでも、HTTPプロキシ認証にSSPIを使用する良い方法はまだ見つかりません。

ただし、 curl(ダウンロードツール)doesはSSPIをサポートしていますが、特定のビルドでのみサポートされています。残念ながら、デフォルトのcygwinビルドはそれらの1つではありません。 curlのビルドがSSPIをサポートしているかどうかを確認するには、詳細なバージョン情報を取得します。

curl -v -V

SSPIがサポートされている場合は、機能ラインで言及されます。

SSPIをサポートするWindowsバージョンを取得するには、 http://curl.haxx.se/latest.cgi?curl=win32-ssl に移動し、ダウンロードの選択肢をWindows、Zip、SSL対応、SSPI対応(7.19.5)。これを読んだ時点で、バージョン番号が変更されている可能性があります。

その後、これはコマンドラインから静かに失敗しました。 Windowsエクスプローラーから実行すると、libeay32.dllが見つからないというメッセージが表示されました。これをWindowsから取得する1つの方法は、 openssl.org の唯一のリンクから windowsバージョン へのリンクです。このプロデューサーは、帯域幅コストを賄うための寄付を要求します。別の方法は、ソースから独自のものを構築することです。

そして結局、そのcurlは次のコマンドラインで機能しました。

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

-U :はパスワードを構成しません。他のコマンドラインオプションはプロキシをセットアップします。おそらく、プロキシとポートの設定を変更する必要があります。

CygwinのcurlリリースだけがSSPIをサポートしている場合、これはすべてはるかに簡単です。私はそれを今要求するつもりです。

47
Nick Fortescue

私の編集には-Uと-uに関する不正確な仮定が含まれていることに注意してください。私は訂正を提出しましたが、暫定的なメモでは:

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の例では、2番目のものです。

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

申し訳ありません!

7
macartm

少し遅れるかもしれませんが、それでもなお言及したいと思います。元の質問は、一般に、ユーザーがすでにログインしているWindowsでのパスワードなしのNTLMプロキシ認証について尋ねています。間違いなくcurlはこれを実行できますが、別のオプションを指定しました。

NTLMApsとCntlmは、中間プロキシとしてNTLM認証を行うプロキシです。ただし、ほとんどの場合Linuxユーザーを対象としているため、どちらもユーザー/パスが必要です。私は歴史的にこれらのツールをWindowsで使用していましたが、資格情報を提供する必要があるという同じ要件に悩まされていました。

結果として、上記の2つのようなHTTPプロキシである Px for Windows を作成しましたが、企業のプロキシで必要な認証を管理するためにSSPIを使用しています。設定する必要があるのは、プロキシサーバーとポートだけです。たとえば、pipやnpmなどのNTLMプロキシを介して通信できない既存のアプリケーションに役立ちます。

独自のアプリを開発する場合、コードはPythonおよびおそらくSSPIにアクセスできる言語内でこれを行う方法を理解するのにも役立ちます。

3
genotrance