ネットワーク・システム・プロパティ

次の3つの方法のいずれかで、次のネットワーク・システム・プロパティを設定できます:

  • javaコマンドの-Dオプションの使用
  • System.setProperty(String, String)メソッドの使用
  • $JAVA_HOME/conf/net.propertiesファイルでの指定。このファイルで指定できるのは、プロキシ関連のプロパティのみです。

特に指定がないかぎり、プロパティ値は使用されるたびにチェックされます。

詳細は、Java SE API仕様のネットワーク・プロパティに関する項を参照してください。

IPv4およびIPv6プロトコル

これらの2つのプロパティは、起動時に1回のみチェックされます。

表10-1 IPv4およびIPv6プロトコルのプロパティ

プロパティ デフォルト値 説明
java.net.preferIPv4Stack false

IPv6を利用可能なオペレーティング・システムでは、ベースとなるネイティブ・ソケットは、デフォルトではIPv6ソケットです。これによりアプリケーションは、IPv4ホストとIPv6ホストの両方に接続したり、その両方のホストからの接続を受け入れたりできます。

アプリケーションでIPv4専用ソケットを使用する場合は、このプロパティをtrueに設定します。これは、アプリケーションがIPv6専用ホストと通信できないことを意味します。

java.net.preferIPv6Addresses false

IPv4アドレスとIPv6アドレスの両方を持つホストを扱う場合、IPv6を利用可能なオペレーティング・システムでは、IPv6アドレスよりもIPv4アドレスの使用を優先するのがデフォルトの動作です。これは、たとえば、IPv4アドレスの表現(192.168.1.1など)に依存するアプリケーションの下位互換性を確保するためです。

このプロパティをtrueに設定すると、このプリファレンスが変更され、可能な場合はIPv4アドレスよりIPv6アドレスが使用されます。

オペレーティング・システムによって返されるアドレスの順序を保持するには、このプロパティをsystemに設定します。

HTTPプロキシ・プロパティ

次のプロキシ設定がHTTPプロトコル・ハンドラによって使用されます。

表10-2 HTTPプロキシ・プロパティ

プロパティ デフォルト値 説明
http.proxyHost デフォルト値なし HTTPプロトコル・ハンドラが使用するプロキシ・サーバーです。
http.proxyPort 80 HTTPプロトコル・ハンドラが使用するポートです。
http.nonProxyHosts localhost|127.*|[::1]

プロキシを介さずにアクセスするホストを示します。通常これは内部ホストを定義します。このプロパティの値は、|文字で区切られたホストのリストです。また、パターン一致にはアスタリスク(*)を使用できます。たとえば、次のように指定すると、プロキシ・サーバーが指定されている場合でも、exmaple.comドメインおよびlocalhost内のすべてのホストに直接アクセスする必要があります:

-Dhttp.nonProxyHosts="*.example.com|localhost"

デフォルト値には、ループバック・アドレスのあらゆる一般的なバリエーションが含まれません。

HTTPSプロキシ・プロパティ

HTTPS (HTTP over SSL)は、主に機密性が必要な場合に使用されるHTTPのセキュアなバージョンです(支払い用のWebサイトなど)。次のプロキシ設定がHTTPSプロトコル・ハンドラによって使用されます。

ノート:

HTTPSプロトコル・ハンドラは、HTTPプロトコルと同じhttp.nonProxyHostsプロパティを使用します。

表10-3 HTTPSプロキシ・プロパティ

プロパティ デフォルト値 説明
https.proxyHost デフォルト値なし HTTPSプロトコル・ハンドラが使用するプロキシ・サーバーです。
https.proxyPort 443 HTTPSプロトコル・ハンドラが使用するポートです。

FTPプロキシ・プロパティ

次のプロキシ設定がFTPプロトコル・ハンドラによって使用されます。

表10-4 FTPプロキシ・プロパティ

システム・プロパティ デフォルト値 説明
ftp.proxyHost デフォルト値なし FTPプロトコル・ハンドラが使用するプロキシ・サーバーです。
ftp.proxyPort 80 FTPプロトコル・ハンドラが使用するポートです。
ftp.nonProxyHosts localhost|127.*|[::1]

http.nonProxyHostsと同様に、このプロパティは、プロキシを介さずにアクセスするホストを示します。

デフォルト値には、ループバック・アドレスのあらゆる一般的なバリエーションが含まれません。

SOCKSプロキシ・プロパティ

SOCKSプロキシはTCPレベルで動作するため、低レベルのトンネリングが可能です。SOCKSプロキシ・サーバーを指定すると、他のプロキシが指定されていないかぎり、すべてのTCP接続がそのプロキシ・サーバーを通過します。次のプロキシ設定がSOCKSプロトコル・ハンドラによって使用されます。

表10-5 SOCKSプロキシ・プロパティ

プロパティ デフォルト値 説明
java.net.socks.username システム・プロパティuser.nameの値 「SOCKSユーザー名およびパスワードの取得」を参照してください。
java.net.socks.password デフォルト値なし 「SOCKSユーザー名およびパスワードの取得」を参照してください。
socksProxyHost デフォルト値なし SOCKSプロトコル・ハンドラが使用するSOCKSプロキシ・サーバーです。
socksProxyPort 1080 SOCKSプロトコル・ハンドラが使用するポートです。
socksProxyVersion 5 サーバーでサポートされているSOCKSプロトコルのバージョン。デフォルトはSOCKS V5を示す5ですが、SOCKS V4を表す4も指定できます。これら以外の値にプロパティを設定すると、未指定の動作が発生します。

SOCKSユーザー名およびパスワードの取得

SOCKSユーザー名およびパスワードは次の方法で取得します:
  1. まず、アプリケーションがjava.net.Authenticatorのデフォルト・インスタンスを登録している場合、文字列SOCKS5に設定されたプロトコルと、文字列SOCKS authenticationに設定されたプロンプトで、デフォルト・インスタンスを問い合せます。
  2. オーセンティケータがユーザー名/パスワードを返さない場合や、オーセンティケータが登録されていない場合は、システムによってプロパティjava.net.socks.usernamejava.net.socks.passwordの値がチェックされます。
  3. これらの値が存在しない場合は、システム・プロパティuser.nameでユーザー名がチェックされます。この場合、パスワードは指定されません。

UNIXドメイン・ソケットの一時ディレクトリ

nullアドレス・パラメータを指定してServerSocketChannel.bindを呼び出すと、チャネルのソケットが自動的に割り当てられたソケット・アドレスにバインドされます。UNIXドメイン・ソケットの場合、これは事前定義されたシステムの一時ディレクトリ内の一意のパスを意味します。LinuxおよびmacOSでは、このディレクトリを決定する検索順序は次のとおりです:

  1. システム・プロパティjdk.net.unixdomain.tmpdir (コマンドラインまたはSystem.setProperty(String, String)によって設定)
  2. $JAVA_HOME/conf/net.propertiesファイルに設定されている同じプロパティ
  3. システム・プロパティjava.io.tmpdir

Windowsでは、このディレクトリを決定する検索順序は次のとおりです:

  1. システム・プロパティjdk.net.unixdomain.tmpdir (コマンドラインまたはSystem.setProperty(String, String)によって設定)
  2. %JAVA_HOME%\conf\net.propertiesファイルに設定されている同じプロパティ
  3. TEMP環境変数
  4. システム・プロパティjava.io.tmpdir

UNIXドメイン・ソケット・アドレスの長さは(プラットフォームによっては)約100バイトに制限されているため、一時ディレクトリの名前とソケットに使用されるファイル名がこの制限を超えないようにすることが重要です。

ノート:

クライアント・ソケットがbindを呼び出さずにリモート宛先に接続されている場合、ソケットは暗黙的にバインドされます。この場合、UNIXドメイン・ソケットの名前はありません(つまり、そのパスは空です)。この動作は、システムまたはネットワークのプロパティの影響を受けません。

その他のHTTP URLストリーム・プロトコル・ハンドラのプロパティ

これらのプロパティは、起動時に1回のみチェックされます。

表10-7 その他のHTTP URLストリーム・プロトコル・ハンドラのプロパティ

プロパティ デフォルト値 説明
http.agent Java/<version> HTTPリクエストのUser-Agentリクエスト・ヘッダーで送信される文字列を定義します。文字列Java/<version>は、プロパティで指定された文字列に追加されます。

たとえば、-Dhttp.agent="foobar"が指定されている場合、JVMのバージョンが1.8.0であれば、User-Agentヘッダーにfoobar Java/1.8.0が含まれます。

http.auth.digest.validateServer false 「HTTPダイジェスト認証メカニズムの動作を変更するシステム・プロパティ」を参照してください。
http.auth.digest.validateProxy false 「HTTPダイジェスト認証メカニズムの動作を変更するシステム・プロパティ」を参照してください。
http.auth.digest.cnonceRepeat 5 「HTTPダイジェスト認証メカニズムの動作を変更するシステム・プロパティ」を参照してください。
http.auth.ntlm.domain デフォルト値なし

他のHTTP認証スキームと同様に、New Technology LAN Manager (NTLM)は、必要に応じてjava.net.Authenticatorクラスを使用してユーザー名とパスワードを取得します。しかし、NTLMの場合はNTドメイン名も必要です。ドメインを指定するには、次の3つのオプションがあります。

  1. ドメインを指定しない。環境によっては、実際にはドメインが必要とされないので、アプリケーションで指定する必要がありません。
  2. ドメイン名は、ユーザー名の前にバックスラッシュ(\)を付けることで、ユーザー名内にエンコードできます。この方法では、ユーザーがこの表記方法を使用しなければならないということを意識すれば、Authenticatorクラスを使用する既存のアプリケーションを変更する必要がありません。
  3. ドメイン名を2番目のオプションで指定せず、システム・プロパティhttp.auth.ntlm.domainが定義されている場合、このプロパティの値がドメイン名として使用されます。
http.keepAlive true

永続(キープ・アライブ)接続をサポートするかどうかを示します。これを使用すると、複数のHTTP要求に対して再利用されるベースとなるソケット接続を許可することによって、パフォーマンスが改善されます。これがtrueに設定されている場合は、HTTP 1.1サーバーとの間で永続接続が要求されます。

永続接続の使用を無効にするには、このプロパティをfalseに設定します。

http.maxConnections 5 HTTP永続接続(http.keepAliveプロパティを参照)が有効な場合、この値によって、宛先ごとに同時に保持されるアイドル接続の最大数が決まります。

HTTPダイジェスト認証メカニズムの動作を変更するシステム・プロパティ

システム・プロパティhttp.auth.digest.validateServerおよびhttp.auth.digest.validateProxyは、HTTPダイジェスト認証メカニズムの動作を変更します。ダイジェスト認証は、サーバーがユーザーのパスワードを認識していることをクライアントに証明することによって、サーバー自体をクライアントに認証させるための限定された機能をサーバーに提供します。しかし、すべてのサーバーがこの機能をサポートするわけではありません。また、デフォルトではこのチェックはオフに設定されています。オリジンでの認証に対してこのチェックを強制するには、http.auth.digest.validateServertrueに設定し、プロキシ・サーバーでhttp.auth.digest.validateProxytrueに設定します。

通常、システム・プロパティhttp.auth.digest.cnonceRepeatを設定する必要はありません。このプロパティは、cnonce値を再使用する回数を決定します。このプロパティは、MD5-sessアルゴリズムを使用する場合に役に立ちます。この値を増やすと、各HTTP要求のためにハッシュしなければならない情報の量が減るので、クライアントとサーバーの両方で計算のオーバーヘッドが減少します。

アドレス・キャッシュ・プロパティ

名前解決の実行時、java.netパッケージはセキュリティ上とパフォーマンス上の両方の理由で、アドレス・キャッシュを使用します。アドレス解決の試行は、前方解決(名前からIPアドレスへ)でも逆方向の解決(IPアドレスから名前へ)でもすべて、成功であったかどうかを問わず結果がキャッシュされます。そのため、以後の同一の要求はネーム・サービスにアクセスする必要がなくなります。これらのプロパティを使用すると、アドレス・キャッシュの動作を調整できます。

表10-8 アドレス・キャッシュ・プロパティ

プロパティ デフォルト値 説明
networkaddress.cache.ttl -1

$JAVA_HOME/conf/security/java.securityファイルで指定され、ネーム・サービスからの正常な名前検索のキャッシュ・ポリシーを示します。値は、成功した名前検索がキャッシュに保持される秒数に対応する整数です。

-1の値や、その他の負の値はすべて、「永久にキャッシュする」ことを意味します。0 (ゼロ)は、キャッシュを使用しないという意味です。

セキュリティ・マネージャがインストールされている場合のデフォルト値は-1 (永久)で、セキュリティ・マネージャがインストールされていない場合は実装固有となります。

networkaddress.cache.negative.ttl 10 $JAVA_HOME/conf/security/java.securityファイルで指定され、ネーム・サービスからの失敗した名前検索のキャッシュ・ポリシーを示します。

値は、失敗した名前検索がキャッシュに保持される秒数に対応する整数です。-1の値や、その他の負の値はすべて、「永久にキャッシュする」ことを意味します。値0 (ゼロ)はキャッシュを使用しないという意味です。