このリンクでは、さまざまな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台のマシンでのみ再現可能であるため、認証は他の場所で成功します。)