セキュリティ・プロパティ・ファイル

セキュリティ・プロパティ・ファイルは、セキュリティ・プロパティの名前とその値を含むテキスト・ファイルです。これらのプロパティを設定することで、Javaセキュリティの特定の側面をカスタマイズできます。

$JAVA_HOMEにあるJDKからJavaアプリケーションを起動すると、JVMはデフォルトで、セキュリティ・プロパティを$JAVA_HOME/conf/security/java.security(マスター・セキュリティ・プロパティ・ファイルと呼ばれる)で指定された値に設定します。別のセキュリティ・プロパティ・ファイルを指定できます。「代替セキュリティ・プロパティ・ファイルの指定」を参照してください。

セキュリティ・プロパティ・ファイルで設定されるセキュリティ・プロパティは、静的に設定されます。アプリケーションのコードに値を設定することで、セキュリティ・プロパティを動的に設定できます。「セキュリティ・プロパティ・ファイルでのセキュリティ・プロパティの静的な設定」および「アプリケーション・コードでのセキュリティ・プロパティの動的な設定」を参照してください。

セキュリティ・プロパティのロギングの有効化および表示の詳細は、「セキュリティ・プロパティのトラブルシューティング」を参照してください。

デフォルトでは、マスター・セキュリティ・プロパティ・ファイルは、次のようなJavaの特定の側面をカスタマイズするセキュリティ・プロパティを設定します:

  • セキュリティ・プロバイダの登録: セキュリティ・プロバイダは、JavaセキュリティAPIの暗号化の側面のサブセットの具体的な実装を提供するパッケージまたはパッケージのセットです。マスター・セキュリティ・プロパティ・ファイルは、security.provider.nという形式で複数のセキュリティ・プロパティを設定します。nはプロバイダの優先順位です。優先順位とは、特定プロバイダの指定がない場合に、要求されたアルゴリズムに関して検索されるプロバイダの順位です。

    詳細は、「ステップ8.1: プロバイダの構成」を参照してください。

  • アルゴリズムの制限: 証明書パス検証、TLS、署名付きJARファイルおよびXML署名検証のための制限付きアルゴリズムおよびレガシー・アルゴリズムが対象となります。たとえば、jdk.certpath.disabledAlgorithmsおよびjdk.tls.disabledAlgorithmは、証明パス検証およびTLS/DTLSプロトコル・ネゴシエーション中に無効にするアルゴリズムをリストします。
  • Java Secure Socket Extension (JSSE): JSSEにより、セキュアなインターネット通信が可能になります。これは、JavaバージョンのTLSおよびDTLSプロトコルのフレームワークおよび実装を提供し、データ暗号化、サーバー認証、メッセージの整合性の他、オプションでクライアント認証の機能を含んでいます。関連するセキュリティ・プロパティには次のものがあります:

    • jdk.tls.keyLimits: アルゴリズムでキー・セットを使用して暗号化可能なデータ量を制限します
    • ssl.KeyManagerFactoryおよびssl.TrustManagerFactoryjavax.net.sslパッケージのデフォルトのキーおよびトラスト・マネージャ・ファクトリ・アルゴリズムを指定します

    詳細は、「JSSEのカスタマイズ」を参照してください。

  • Javaセキュリティのその他の側面: これには、デフォルトのキーストア・タイプ、SecureRandom実装の構成およびKerberosが含まれます。

代替セキュリティ・プロパティ・ファイルの指定

コマンドラインからシステム・プロパティjava.security.properties=<URL>を使用して、代替のjava.securityプロパティ・ファイルを指定できます。このプロパティ・ファイルは、マスター・セキュリティ・プロパティ・ファイルに追加されます。java.security.properties==<URL>(等号を2つ使用)でプロパティ・ファイルを指定すると、そのプロパティ・ファイルはマスター・セキュリティ・プロパティ・ファイルを完全にオーバーライドします。

セキュリティ・プロパティ・ファイルでのセキュリティ・プロパティの静的な設定

セキュリティ・プロパティ・ファイルでセキュリティ・プロパティ値を静的に設定するには、次の形式で既存の行を追加または変更します:

propertyName=propertyValue

たとえば、デフォルトのSunX509以外のキー・マネージャ・ファクトリのアルゴリズム名を指定するとします。これを実行するには、ssl.KeyManagerFactory.algorithmというセキュリティ・プロパティの値として、アルゴリズム名を指定します。たとえば、値をMyX509に設定するには、次の行を追加します:

ssl.KeyManagerFactory.algorithm=MyX509

セキュリティ・プロパティ・ファイルの行をコメント・アウトする(つまり、セキュリティ・プロパティ・ファイルからセキュリティ・プロパティを設定するときにJVMがその行を無視するようにする)には、行の先頭に番号記号(#)を挿入します。

デフォルトでは、マスター・セキュリティ・プロパティ・ファイルには、指定されたセキュリティ・プロパティを詳細に説明する多くのコメントが含まれています。これらのセキュリティ・プロパティ自体がコメント・アウトされる場合があります。コメント・アウトされたこれらのセキュリティ・プロパティには、値が指定されている場合も、値がまったく指定されていない場合もあります。

ノート:

値が設定されていないセキュリティ・プロパティは、空の文字列に設定されます。コメント・アウトされたセキュリティ・プロパティはnull値に設定されます。この場合、セキュリティ・プロパティにデフォルト値が割り当てられることがあります。マスター・セキュリティ・プロパティ・ファイルのコメントでは、セキュリティ・プロパティにデフォルト値があるかどうかを指定する必要があります。

アプリケーション・コードでのセキュリティ・プロパティの動的な設定

アプリケーション・コードでセキュリティ・プロパティを動的に設定するには、java.security.Security.setPropertyメソッドをコールします:

Security.setProperty("propertyName," "propertyValue");

たとえば、キー・マネージャ・ファクトリのアルゴリズム名を指定する、前の例に対応したsetProperty()メソッドの呼出しでは:

Security.setProperty("ssl.KeyManagerFactory.algorithm", "MyX509");

ノート:

一部のセキュリティ・プロパティは、java.security.Securityクラスの初期化時にセキュリティ・プロパティ・ファイルから読み取られてキャッシュされている場合、動的に設定できません。コードでこれを試みても例外はスローされません。

セキュリティ・プロパティのトラブルシューティング

コマンドライン・オプション-Djava.security.debug=propertiesを指定して、セキュリティ・プロパティのロギングを有効にします。propertiesという接頭辞が付いたメッセージには、すべてのセキュリティ・プロパティの最終値と、includeディレクティブの処理方法に関する情報が含まれます。「java.security.debugシステム・プロパティ」を参照してください。

コマンドライン・オプション-XshowSettings:securityは、JDKで有効なセキュリティ設定の概要を出力します。「java -XshowSettings:securityオプション」を参照してください。

Java Flight Recorder (JFR)イベントjdk.InitialSecurityPropertyを使用して、実行中のJDKのセキュリティ・プロパティの初期値を取得できます。