モジュール java.base
パッケージ javax.net.ssl

クラスSSLParameters


  • public class SSLParameters
    extends Object
    SSL/TLS/DTLS接続のパラメータをカプセル化します。 パラメータは、SSL/TLS/DTLSハンドシェイクで受け入れられる暗号スイートのリスト、許可されるプロトコルのリスト、SSL/TLS/DTLSハンドシェイク中のエンドポイント識別アルゴリズム、Server Name Indication (SNI)、最大ネットワーク・パケット・サイズ、アルゴリズム制約、およびSSL/TLS/DTLSサーバーがクライアント認証を要求するか要求するかなどです。

    SSLParametersは、このクラスのコンストラクタを使用して作成することができます。 オブジェクトは、SSLSocketSSLServerSocket、およびSSLEnginegetSSLParameters()メソッド、またはSSLContextgetDefaultSSLParameters()メソッドとgetSupportedSSLParameters()メソッドを使用して取得することもできます。

    SSLParametersは、SSLSocket.setSSLParameters()SSLServerSocket.setSSLParameters()、およびSSLEngine.setSSLParameters()メソッドを使用して接続に適用できます。

    たとえば:

         SSLParameters p = sslSocket.getSSLParameters();
         p.setProtocols(new String[] { "TLSv1.2" });
         p.setCipherSuites(
             new String[] { "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", ... });
         p.setApplicationProtocols(new String[] {"h2", "http/1.1"});
         sslSocket.setSSLParameters(p);
     

    導入されたバージョン:
    1.6
    関連項目:
    SSLSocket, SSLEngine, SSLContext
    • コンストラクタの詳細

      • SSLParameters

        public SSLParameters()
        SSLParametersを構築します。

        cipherSuites、プロトコル、暗号化アルゴリズム制約、エンドポイント識別アルゴリズム、サーバー名およびサーバー名マッチャの値はnullに設定され、useCipherSuitesOrder、wantClientAuthおよびneedClientAuthはfalseに設定され、enableRetransmissionsはtrueに設定され、最大ネットワーク・パケット・サイズは0に設定されます。

      • SSLParameters

        public SSLParameters​(String[] cipherSuites)
        指定された暗号化方式群の配列からSSLParametersを構築します。

        このコンストラクタの呼出しは、引数なしのコンストラクタに続いてsetCipherSuites(cipherSuites);を呼び出すことと同じです。 暗号スイート名の標準リストは、Java Cryptography Architecture Standard Algorithm NameドキュメントのJSSE暗号スイート名の項に記載されています。 プロバイダは、このリストにない暗号スイート名をサポートしている場合があります。

        パラメータ:
        cipherSuites - 暗号化方式群の配列(nullも可)
      • SSLParameters

        public SSLParameters​(String[] cipherSuites,
                             String[] protocols)
        指定された暗号化方式群とプロトコルの配列からSSLParametersを構築します。

        このコンストラクタの呼出しは、引数なしのコンストラクタに続いてsetCipherSuites(cipherSuites); setProtocols(protocols);を呼び出すことと同じです。 暗号スイート名の標準リストは、Java Cryptography Architecture Standard Algorithm NameドキュメントのJSSE暗号スイート名の項に記載されています。 プロバイダは、このリストにない暗号スイート名をサポートしている場合があります。

        パラメータ:
        cipherSuites - 暗号化方式群の配列(nullも可)
        protocols - プロトコルの配列(nullも可)
    • メソッドの詳細

      • getCipherSuites

        public String[] getCipherSuites()
        暗号化方式群の配列のコピーを返します。設定されていない場合はnullを返します。

        返される配列には、Java Cryptography Architecture Standard Algorithm Nameドキュメントの「JSSE暗号スイート名」セクションにある標準暗号スイート名のリストからの暗号スイートが含まれ、プロバイダがサポートする他の暗号スイートが含まれる場合もあります。

        戻り値:
        暗号化方式群の配列のコピー。設定されていない場合はnull。
      • setCipherSuites

        public void setCipherSuites​(String[] cipherSuites)
        暗号化方式群の配列を設定します。
        パラメータ:
        cipherSuites - 暗号化方式群の配列(nullも可) 暗号スイート名の標準リストは、Java Cryptography Architecture Standard Algorithm NameドキュメントのJSSE暗号スイート名の項に記載されています。 プロバイダは、このリストにない暗号スイート名をサポートするか、特定の暗号スイートに推奨名を使用しない可能性があります。
      • getProtocols

        public String[] getProtocols()
        プロトコルの配列のコピーを返します。設定されていない場合はnullを返します。
        戻り値:
        プロトコルの配列のコピー。設定されていない場合はnull。
      • setProtocols

        public void setProtocols​(String[] protocols)
        プロトコルの配列を設定します。
        パラメータ:
        protocols - プロトコルの配列(nullも可)
      • getWantClientAuth

        public boolean getWantClientAuth()
        クライアント認証を要求するかどうかを返します。
        戻り値:
        クライアント認証を要求するかどうか。
      • setWantClientAuth

        public void setWantClientAuth​(boolean wantClientAuth)
        クライアント認証を要求するかどうかを設定します。 このメソッドを呼び出すと、needClientAuthフラグがクリアされます。
        パラメータ:
        wantClientAuth - クライアント認証が要求されるかどうか
      • getNeedClientAuth

        public boolean getNeedClientAuth()
        クライアント認証を必須とするかどうかを返します。
        戻り値:
        クライアント認証を必須とするかどうか。
      • setNeedClientAuth

        public void setNeedClientAuth​(boolean needClientAuth)
        クライアント認証を必須とするかどうかを設定します。 このメソッドを呼び出すと、wantClientAuthフラグがクリアされます。
        パラメータ:
        needClientAuth - クライアント認証が必要かどうか
      • getAlgorithmConstraints

        public AlgorithmConstraints getAlgorithmConstraints()
        暗号化アルゴリズムの制約を返します。
        戻り値:
        暗号化アルゴリズムの制約。制約が設定されていない場合はnull
        導入されたバージョン:
        1.7
        関連項目:
        setAlgorithmConstraints(AlgorithmConstraints)
      • setAlgorithmConstraints

        public void setAlgorithmConstraints​(AlgorithmConstraints constraints)
        実行環境によって構成された任意の制約に加えて使用される、暗号化アルゴリズムの制約を設定します。

        constraintsパラメータがnull以外の場合、SSL/TLS/DTLSハンドシェイクで使用されるすべての暗号化アルゴリズム、キーおよびアルゴリズム・パラメータは、制約によって許可される必要があります。

        パラメータ:
        constraints - アルゴリズムの制約(またはnull)
        導入されたバージョン:
        1.7
      • getEndpointIdentificationAlgorithm

        public String getEndpointIdentificationAlgorithm()
        エンド・ポイント識別アルゴリズムを取得します。
        戻り値:
        エンド・ポイント識別アルゴリズム。設定されていない場合はnull。
        導入されたバージョン:
        1.7
        関連項目:
        X509ExtendedTrustManager, setEndpointIdentificationAlgorithm(String)
      • setEndpointIdentificationAlgorithm

        public void setEndpointIdentificationAlgorithm​(String algorithm)
        エンド・ポイント識別アルゴリズムを設定します。

        algorithmパラメータがnull以外または空でない場合、SSL/TLS/DTLSハンドシェイク時にエンドポイントの識別/検証プロシージャを処理する必要があります。 これを行うのは、man-in-the-middle攻撃を回避するためです。

        パラメータ:
        algorithm - エンド・ポイント識別アルゴリズムの標準名を表す文字列(またはnull)。 標準アルゴリズム名の詳細は、Javaセキュリティ標準アルゴリズム名のドキュメントを参照してください。
        導入されたバージョン:
        1.7
        関連項目:
        X509ExtendedTrustManager
      • setServerNames

        public final void setServerNames​(List<SNIServerName> serverNames)
        Server Name Indication (SNI)パラメータの必要なSNIServerNameを設定します。

        このメソッドが役立つのは、クライアント・モードで動作するSSLSocketまたはSSLEngineの場合のみです。

        以後の変更から保護するために、serverNamesリストのクローンが作成されます。

        パラメータ:
        serverNames - 必要なSNIServerNameのリスト(またはnull)
        例外:
        NullPointerException - serverNamesnull要素が含まれている場合
        IllegalArgumentException - serverNamesに同じ名前タイプの名前が複数個含まれている場合
        導入されたバージョン:
        1.8
        関連項目:
        SNIServerName, getServerNames()
      • getServerNames

        public final List<SNIServerName> getServerNames()
        Server Name Indication (SNI)パラメータのすべてのSNIServerNameを含むList、または何も設定されていない場合はnullを返します。

        このメソッドが役立つのは、クライアント・モードで動作するSSLSocketまたはSSLEngineの場合のみです。

        SSL/TLS/DTLS接続の場合、基礎となるSSL/TLS/DTLSプロバイダは、特定のサーバー名タイプのデフォルト値を指定できます。 クライアント・モードでは、サポート対象のサーバー名タイプでサーバーを特定可能な場合には常に、プロバイダはデフォルトでサーバー名表示を含めるようにすることをお薦めします。

        SSLSocket/SSLEngineの作成時にプロバイダがデフォルトのサーバー名表示を初期化することをお薦めします。 次の例では、サーバー名は、ホスト名「www.example.com」とタイプStandardConstants.SNI_HOST_NAMEで初期化されたSNIHostNameのインスタンスとして表現できます。

             Socket socket =
                 sslSocketFactory.createSocket("www.example.com", 443);
         
        または
             SSLEngine engine =
                 sslContext.createSSLEngine("www.example.com", 443);
         

        戻り値:
        null、またはnull以外のSNIServerNameの不変なリスト
        導入されたバージョン:
        1.8
        関連項目:
        List, setServerNames(List)
      • setSNIMatchers

        public final void setSNIMatchers​(Collection<SNIMatcher> matchers)
        Server Name Indication (SNI)パラメータのSNIMatcherを設定します。

        このメソッドが役立つのは、サーバー・モードで動作するSSLSocketまたはSSLEngineの場合のみです。

        以後の変更から保護するために、matchersコレクションのクローンが作成されます。

        パラメータ:
        matchers - SNIMatcherのコレクション(またはnull)
        例外:
        NullPointerException - matchersnull要素が含まれている場合
        IllegalArgumentException - matchersに同じ名前タイプの名前が複数個含まれている場合
        導入されたバージョン:
        1.8
        関連項目:
        Collection, SNIMatcher, getSNIMatchers()
      • getSNIMatchers

        public final Collection<SNIMatcher> getSNIMatchers()
        Server Name Indication (SNI)パラメータのすべてのSNIMatcherを含むCollection(何も設定されていない場合はnull)を返します。

        このメソッドが役立つのは、サーバー・モードで動作するSSLSocketまたはSSLEngineの場合のみです。

        相互運用性を高めるため、プロバイダは一般にデフォルトのマッチャを定義しませんが、これは、サーバーがデフォルトでSNI拡張を無視してハンドシェークを続行するようにするためです。

        戻り値:
        null、またはnull以外のSNIMatcherの不変なコレクション
        導入されたバージョン:
        1.8
        関連項目:
        SNIMatcher, setSNIMatchers(Collection)
      • setUseCipherSuitesOrder

        public final void setUseCipherSuitesOrder​(boolean honorOrder)
        暗号化方式群のローカル設定を適用する必要があるかどうかを設定します。
        パラメータ:
        honorOrder - SSL/TLS/DTLSハンドシェイク中に、#getCipherSuitesのローカル暗号スイートの順序を適用するかどうか。
        導入されたバージョン:
        1.8
        関連項目:
        getUseCipherSuitesOrder()
      • getUseCipherSuitesOrder

        public final boolean getUseCipherSuitesOrder()
        暗号化方式群のローカル設定を適用する必要があるかどうかを返します。
        戻り値:
        SSL/TLS/DTLSハンドシェイク中に、#getCipherSuites内のローカル暗号スイートの順序を適用するかどうか。
        導入されたバージョン:
        1.8
        関連項目:
        setUseCipherSuitesOrder(boolean)
      • setEnableRetransmissions

        public void setEnableRetransmissions​(boolean enableRetransmissions)
        DTLSハンドシェイクの再送信を有効にするかどうかを設定します。 このメソッドはDTLSにのみ適用されます。
        パラメータ:
        enableRetransmissions - trueは、DTLSハンドシェイク再送信を有効にする必要があることを示します。falseは、DTLSハンドシェイク再送信を無効にする必要があることを示します
        導入されたバージョン:
        9
        関連項目:
        getEnableRetransmissions()
      • getEnableRetransmissions

        public boolean getEnableRetransmissions()
        DTLSハンドシェイク再送信を有効にするかどうかを返します。 このメソッドはDTLSにのみ適用されます。
        戻り値:
        true: DTLSハンドシェイク再送信を有効にする必要がある場合
        導入されたバージョン:
        9
        関連項目:
        setEnableRetransmissions(boolean)
      • setMaximumPacketSize

        public void setMaximumPacketSize​(int maximumPacketSize)
        SSL/TLS/DTLSレコードの最大予想ネットワークパケットサイズをバイト単位で設定します。
        APIのノート:
        可能な場合は、HelloVerifyRequestsなどの小さいハンドシェイク・メッセージが断片化されないように、最大パケット・サイズを256バイト未満にすることをお薦めします。
        実装上のノート:
        最大パケットサイズが小さすぎて最小限のレコードを保持できない場合、実装はできるだけ最小限のレコードを生成しようとすることがあります。 ただし、これにより、生成されたパケットが最大パケットサイズよりも大きくなる可能性があります。
        パラメータ:
        maximumPacketSize - 期待される最大ネットワーク・パケット・サイズ(バイト単位)、または基礎となる実装によって自動的に指定される暗黙的なサイズを使用する場合は0
        例外:
        IllegalArgumentException - maximumPacketSizeが負の場合。
        導入されたバージョン:
        9
        関連項目:
        getMaximumPacketSize()
      • getMaximumPacketSize

        public int getMaximumPacketSize()
        SSL/TLS/DTLSレコードの予想される最大ネットワーク・パケット・サイズをバイト単位で返します。
        APIのノート:
        暗黙的なサイズは、特にDTLSプロトコルの実装では固定値にならないことがあります。
        実装上のノート:
        SSL/TLS/DTLS接続の場合、基礎となるプロバイダは、明示的に構成されていない場合、予想される最大ネットワーク・パケット・サイズの暗黙的な値を計算および指定する必要があります。 接続移入されたオブジェクトの場合、アプリケーションが基礎となる実装の実際の暗黙的なサイズを取得できるように、このメソッドは0を返さないでください。

        実装は、最大パケットサイズ構成に準拠するようにしてください。 ただし、最大パケットサイズが小さすぎて最小限のレコードを保持できない場合、実装はできるだけ最小限のレコードを生成しようとすることがあります。 これにより、生成されたパケットが最大パケットサイズよりも大きくなる可能性があります。

        戻り値:
        期待される最大ネットワーク・パケット・サイズ。基礎となる実装によって自動的に指定され、このオブジェクトが接続によって移入されていない場合は、0
        導入されたバージョン:
        9
        関連項目:
        setMaximumPacketSize(int)
      • getApplicationProtocols

        public String[] getApplicationProtocols()
        SSL/TLS/DTLSプロトコルを介してネゴシエートできるアプリケーション・レイヤー・プロトコル名の優先配列を返します。

        配列は空(長さゼロ)である可能性があり、その場合はプロトコル表示は使用されません。

        このメソッドは、呼び出されるたびに新しい配列を返します。

        戻り値:
        アプリケーション・プロトコルStringのnull以外(長さが0の場合もある)の配列。 配列はプロトコル・プリファレンスに基づいて順序付けされ、protocols[0]が最も優先されます。
        導入されたバージョン:
        9
        関連項目:
        setApplicationProtocols(java.lang.String[])
      • setApplicationProtocols

        public void setApplicationProtocols​(String[] protocols)
        SSL/TLS/DTLSプロトコルを介してネゴシエートできるアプリケーション・レイヤー・プロトコル名の優先配列を設定します。

        アプリケーションレイヤープロトコルがベースとなる SSL/TLS実装によってサポートされている場合、この方法では、RFC 7301やApplication Layer Protocol Negotiation (ALPN)などのプロトコルによってネゴシエートできる値を構成します。

        接続のこの終端がアプリケーションプロトコル値を提供することが予想される場合、この方法で構成されたすべてのプロトコルがピアに送信されます。

        接続のこの終端でアプリケーション・プロトコル値を選択することが予想される場合は、このメソッドで構成されたprotocolsがピアによって送信されたものと比較されます。 最初に一致した値がネゴシエーション済の値になります。 ピアによって実際にリクエストされたprotocolsがない場合、基礎となるプロトコルによって実行するアクションが決定されます。 (たとえば、ALPNは"no_application_protocol"アラートを送信し、接続を終了します。)

        実装要件:
        このメソッドは、protocols配列のコピーを作成します。
        パラメータ:
        protocols - 順序付けられたアプリケーション・プロトコルの配列で、protocols[0]が最も優先されます。 アレイが空(長さがゼロ)の場合、プロトコル・インジケータは使用されません。
        例外:
        IllegalArgumentException - プロトコルがnullの場合、または空でない配列内の要素がnullまたは空の(ゼロ長)文字列の場合
        導入されたバージョン:
        9
        関連項目:
        getApplicationProtocols()