2

このリンクでは、さまざまなhttpクライアントのJava実装について詳しく説明しています。NTLMプロトコルの実装の違いに関する情報を提供できるリンクを探しています。

Windowsマシンの1つで、commons-httpクライアント3.1の実装が認証エラー(httpステータスコード401)で失敗するのに、java1.5の実装は成功することがわかりました。NTLM認証プロトコルのjava1.5実装はオープンソースではないため、2つの実装を比較して、何が問題になっているのかを理解することはできません。

アップデート1

commonshttpクライアントがNTLMv2をサポートしていないことを認識しています。このリンクは、さまざまなJava httpクライアントの実装間の比較を提供し、apachehttpクライアントがNTLMプロトコルの部分的な実装を提供することを示しています。それについては詳しく説明しません。

問題をさらにトラブルシューティングすると、このリンクとHTTPClientを組み合わせて提供されるNTLM実装がWindowsマシンで機能することもわかりました(コモンズhttpクライアントの実装は上記のように機能しません)。

アップデート2

(wireshackを使用して)パケットをスニッフィングすることにより、commonshttpクライアント3.1ntlmプロトコルの実装がタイプ3メッセージでNTLM応答を生成しないことに気付きました。これは、JDK実装によって生成されます。NTLM応答データが空の場合に認証が失敗することを示すサーバー/クライアント設定を知っていますか?(私たちが直面している認証の失敗は1台のマシンでのみ再現可能であるため、認証は他の場所で成功します。)

4

2 に答える 2

1

Commons httpclient 3.1はNTLMv2を実装せず、古いNTLM(別名NTLMv1)仕様のみを実装します。

于 2011-08-22T13:46:15.720 に答える
1

この問題の根本原因が見つかりました。認証エラーの原因となった構成設定は、NoLMHashPolicy と呼ばれるセキュリティ ポリシーによって制御されていました。このポリシーを有効にすると、Windows サーバーはパスワードの LM ハッシュ値を保存しなくなり、NT 応答ハッシュを使用して認証を行うことになります。コモンズ http クライアント 3.1 ライブラリの NTLM プロトコル実装は NT 応答をまったく計算しないため、この設定が有効になっていると、このエラーに直面する可能性があります。この設定の詳細については、こちらを参照してください

解決策として、AuthScheme インターフェイスの実装を追加し、タイプ 3 メッセージで NT 応答を計算するコモンズ http クライアント ライブラリ (4.1.2 など) の上位バージョンからコードを抽出することができます。NT 応答フィールドの長さとオフセット値を更新することを忘れないでください。AuthScheme インターフェースの実装の準備ができたら、 AuthPolicy.registeryScheme() メソッドを使用して注入できます。

于 2011-08-31T06:57:05.017 に答える