Eclipse 3 5 Access Internet With Ntlm2 Proxy

NTLMv2 を使用している環境でプロキシ認証に失敗する現象

[Net] You can't update Eclipse 3.5 behind the proxy
https://bugs.eclipse.org/bugs/show_bug.cgi?id=281472

認証が必要なプロキシを使用している場合、Galileo で更新サイトからプラグインをインストールしようとすると通信に失敗し、HTTP Proxy Authorization Required というエラーが発生する。試してないけど、インターネット経由で CVS や Subversion などのリポジトリに接続するときにも失敗するかもしれない。

NTLMv2 は、プロキシ認証に使われている方式のひとつ。最近では他の方式に取って変わられつつあるが、何年か前に構築されたようなネットワークであれば、まだまだ現役で使われている。Eclipse もこれまで NTLMv2 に対応していたため、ネットワークの設定を行えば、プロキシを越えてインターネットへ接続できていた。

ところが、Galileo で使用されている HttpClient 3.1 は、NTLMv2 に対応していない。実は一つ前の 3.0 までは対応していたんだけど、NTLMv2 のライセンスは Microsoft が持っていることから「ライセンス契約をせずに実装しちゃうのはマズかったかも」ということで 3.1 からは対応が外されたらしい。したがって、HttpClient 3.1 を使用している Galileo でも、そのままでは NTLMv2 を使用することができない。

公式に紹介されている回避策として、Eclipse 3.4 までと同じように Java 実行環境のネットワーク機能を使うように戻すことができる。

ECF Filetransfer Support for NTLMv2 Proxies
http://wiki.eclipse.org/ECF_Filetransfer_Support_for_NTLMv2_Proxies

この記事によれば、Eclipse 起動時のシステムプロパティに以下を指定すればいいらしい。一番簡単なのは、Galileo をインストールしたディレクトリにある eclipse.ini の末尾に以下の内容を追加することだろう。

-Dorg.eclipse.ecf.provider.filetransfer.excludeContributors=org.eclipse.ecf.provider.filetransfer.httpclient
-Dhttp.proxyPort=8080
-Dhttp.proxyHost=myproxy
-Dhttp.proxyUser=mydomain\myusername
-Dhttp.proxyPassword=mypassword
-Dhttp.nonProxyHosts=localhost|127.0.0.1

1 行目は HttpClient を使わないようにする設定で、2 行目以降はプロキシの設定なので、自分の環境に合わせて書き換える必要がある。パスワードを書かなければいけないので、やや危険。

また、下記ページのコメントによれば、NTLMv2 と BASIC 認証の両方をサポートしているプロキシの場合、HttpClient を有効にしたままでも、ユーザ名を「mydomain\myusername」の形式で入力すると通ることがあるようだ。

[Net] HTTP Proxy Authentication Required
https://bugs.eclipse.org/bugs/show_bug.cgi?id=281384

[2010-03-06 追記] 冒頭にも追記した通り、Eclipse 3.5.2 (Galileo SR2) では、上記の設定変更を行わなくても NTLM 認証の必要なプロキシを通過できるようになった。プロキシの設定をデフォルトの "Native" にしておけば、自動的にインターネットオプションの設定を使って接続してくれる。

Reference:
http://d.hatena.ne.jp/sardine/20090626