JavaとプロキシとDNS

はじめに

Javaではセキュリティ上の理由から、アプレットがホストへ接続するときには必ずDNSを引いてホストの照合を行っている。

このためダイヤルアップ環境でオフラインのときや、ファイアウォールの内側からは、DNSが引けなくてJavaアプレットが動作しないことがある。

ダイヤルアップルータの環境だと、Javaアプレットが読み込まれるたびにダイヤルアップを開始してしまう可能性がある。

LAN内のホストへもむやみにプロキシで接続するのは資源の無駄だし、セキュリティ上の理由からプロキシがLAN内のホストへ接続することは禁止されている場合もある。通常は除外ホスト(プロキシを経由しないで接続するホスト)を設定することにより対処する。

不可解なことに、trustProxyや除外ホストの設定にはユーザーインターフェースが提供されておらず、直接設定ファイルを編集しなくてはならない場合も多い。

またJavaのネットワークの設定は他のアプリケーションのOSの設定と独立していて、別々に設定しなくてはならない場合も多い。ユーザーから見ると無意味に使いにくいだけだが。

そこでJavaにおいてプロキシを設定するための設定ファイルの場所や設定の方法をまとめてみた。


アプレットビューア/HotJava/Java Plug-in/MRJ

設定ファイルの場所が違うだけで、設定ファイルへの記述の仕方は同じである(Java Plug-inだけは違う)。

設定ファイルの場所
JDK 1.0, HotJava%SystemDrive%\.hotjava\properties
JDK 1.1〜Java2 SDK 1.2%USERPROFILE%\.hotjava\properties
Java2 SDK 1.3%USERPROFILE%\.appletviewer
Java Plug-in%USERPROFILE%\.java\properties
MRJ 2.1.4Macintosh HD:システムフォルダ:機能拡張:MRJ Libraries:lib:appletviewer.properties

設定ファイルへの記述例(Java Plug-in以外)

http.proxyHost=127.0.0.1
http.proxyPort=8080
http.nonProxyHosts=localhost|127.0.0.1|pcg-803|192.168.0.103
trustProxy=true

通常は直接設定ファイルはいじらないで設定ダイアログを使う。ただしアプレットビューアの設定ダイアログでは、なぜか除外ホストを指定できない。HotJavaでは可能。

Java Plug-inでブラウザの設定を使わないときに除外ホストを指定する方法は不明。ブラウザの除外ホストの設定は認識できるのでブラウザの設定を使うようにすれば良い。

trustProxyは直接設定ファイルを編集して設定しなくてはならない。

iCab + MRJやNetscape Communicator + MRJ Plug-inの場合、インターネットコンフィグやブラウザでの除外ホストの設定は無視される。設定ツールは提供されていないので、appletviewer.propertiesを直接編集しなくてはならない。ただしアプリケーションによっては不要。たとえばIE 4.5の場合はIEの設定が優先する。

MRJではインターネットコンフィグでプロキシを使わないように設定して、かつappletviewer.propertiesにプロキシの設定を書いていない状態でも、プロキシ経由での接続になってしまう。どこからプロキシの設定を取得してくるのかは謎。あるいはチェックをオフにするだけでは無視されてしまうのかもしれない。


Netscape Communicator

設定ファイルの場所
Windows%ProgramFilesDir%\Netscape\Users\ユーザ名\prefs.js
MacintoshMacintosh HD:システムフォルダ:初期設定:Netscape Users:ユーザ名:Netscape Preferences
UNIX~/.netscape/preferences.js

設定ファイルへの記述例

user_pref("network.proxy.autoconfig_url", "file:///J:/usr/home/kimu/stuff/autoconf.pac");
user_pref("network.proxy.ftp", "127.0.0.1");
user_pref("network.proxy.ftp_port", 8080);
user_pref("network.proxy.http", "127.0.0.1");
user_pref("network.proxy.http_port", 8080);
user_pref("network.proxy.no_proxies_on", "localhost,127.0.0.1,192.168.0.103,pcg-803,pcg-c1");
user_pref("network.proxy.type", 1);
user_pref("security.lower_java_network_security_by_trusting_proxies", true);

最後の行はtrustProxy=trueに相当する設定で、これだけはダイアログに設定項目が提供されていないため、直接設定ファイルを編集しなくてはならない。→参考


Internet Explorer (Windows)

デフォルトでtrustProxy=trueに相当する状態らしく、DNSが引けなくてもSecurityExceptionを起こすことはない。trustProxy=falseの状態にしたいとき困るかもしれないが。

その他のプロキシ関連の設定もすべてインターネット オプションから設定でき、直接レジストリを編集する必要はまったくない。


課題

ダイヤルアップルータの外部への接続を禁止していると、アプレットの起動にやたらに時間が掛かる場合がある。ダイヤルアップルータへのDNS照会がタイムアウトになるまで待ってしまうからである。

これはtrustProxy=trueにしても解決できない。trustProxy=trueはあくまでDNSの問い合わせが失敗したときプロキシを信頼するという設定であって、DNSへの問い合わせそのものをやめるわけではないからである。


mailto: VYV03354@nifty.ne.jp