36

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

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

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

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

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

4

3 に答える 3

48

ここに他の誰かからの回答がない場合、私はそれが他の誰かに役立つことを願っています。

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

  1. http://curl.haxx.se/latest.cgi?curl=win32-sslからSSPI対応のcurlをダウンロードし、 Windows、zip、SSL対応、SSPI対応(7.19.5)に変更します。
  2. http://www.slproweb.com/products/Win32OpenSSL.htmlからWindowsOpen-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(ダウンロードツール) 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.exe -U : --proxy-ntlm --proxy myproxy.com:8080 http://www.google.com

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

cygwinのcurlリリースのみがSSPIをサポートしていれば、これはすべてはるかに簡単です。今からリクエストを入れに行きます。

于 2009-08-14T10:41:24.237 に答える
7

私の編集には、-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

もう 1 つは、透過的な NTLM の例です。

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

ごめんなさい!

于 2012-10-19T13:55:46.923 に答える
3

少し遅いかもしれませんが、それでもこれについて言及したかったのです。元の質問は、一般的に、ユーザーが既にログインしている Windows でパスワードを使用しない NTLM プロキシ認証について質問することです。curl がこれを実行できることは間違いありませんが、別のオプションを提供したかったのです。

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

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

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

于 2016-08-19T19:58:28.217 に答える