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

クラスSNIHostName



  • public final class SNIHostName
    extends SNIServerName
    このクラスのインスタンスは、Server Name Indication (SNI)拡張のhost_nameタイプのサーバー名を表します。

    TLS拡張(RFC 6066)のセクション3「Server Name Indication」で説明されているように、「HostName」には、クライアントが理解できるサーバーの完全修飾DNSホスト名が含まれます。 ホスト名のエンコードされたサーバー名の値は、ASCIIエンコーディングを使用したドットで終わらないバイト文字列として表現されます。 これにより、RFC 5890で規定されたA-label(Internationalized Domain Names for Applications (IDNA)の有効な文字列のASCII互換エンコーディング(ACE)形式)の使用による国際化ドメイン名(IDN)のサポートが可能となります。

    SNIHostNameオブジェクトは不変です。

    導入されたバージョン:
    1.8
    関連項目:
    SNIServerName, StandardConstants.SNI_HOST_NAME
    • コンストラクタの詳細

      • SNIHostName

        public SNIHostName​(String hostname)
        指定されたホスト名を使用してSNIHostNameを作成します。

        RFC 6066により、ホスト名のエンコードされたサーバー名の値はStandardCharsets.US_ASCIIに準拠します。 このメソッドでは、hostnameにユーザー・フレンドリな国際化ドメイン名(IDN)を指定できます。 ホスト名のASCII文字に関する制限(RFC 3490RFC 1122RFC 1123を参照)を強制的に適用し、hostnameをASCII互換エンコーディング(ACE)に変換するには、次のようにIDN.toASCII(String, int)が使用されます。

             IDN.toASCII(hostname, IDN.USE_STD3_ASCII_RULES);
         

        hostname引数が不正になるのは次の場合です。

        • hostnameが空である。
        • hostnameがドットで終わっている。
        • hostnameが、RFC 3490仕様に準拠した有効な国際化ドメイン名(IDN)でない。
        パラメータ:
        hostname - このサーバー名のホスト名
        例外:
        NullPointerException - hostnamenullの場合
        IllegalArgumentException - hostnameが不正である場合
      • SNIHostName

        public SNIHostName​(byte[] encoded)
        指定されたエンコード値を使用してSNIHostNameを作成します。

        このメソッドは通常、要求されたSNI拡張のエンコードされた名前の値を解析するために使用されます。

        RFC 6066により、ホスト名のエンコードされた名前の値はStandardCharsets.US_ASCIIに準拠します。 ただし、SNI拡張の以前のバージョン(RFC 4366)では、エンコードされたホスト名はUTF-8エンコーディングを使用したバイト文字列として表現されます。 このメソッドではバージョンの許容範囲を拡げるため、encoded引数の文字セットとして、StandardCharsets.US_ASCIIだけでなくStandardCharsets.UTF_8も使用できるようになっています。 encoded引数をASCII互換エンコーディング(ACE)のホスト名に変換するには、IDN.toASCII(String)が使用されます。

        このコンストラクタを使用するのは、要求されたSNI拡張のエンコードされた名前の値を解析する場合のみにすることを強くお薦めします。 それ以外の場合は、RFC 6066に準拠するために、encoded引数で常にStandardCharsets.US_ASCII準拠の文字セットを使用し、ホスト名のASCII文字に関する制限(RFC 3490RFC 1122RFC 1123を参照)を強制的に適用するか、かわりにSNIHostName(String)を使用してください。

        encoded引数が不正になるのは次の場合です。

        • encodedが空である。
        • encodedがドットで終わっている。
        • encodedStandardCharsets.US_ASCIIまたはStandardCharsets.UTF_8に準拠した文字セットでエンコードされていない。
        • encodedが、RFC 3490仕様に準拠した有効な国際化ドメイン名(IDN)でない。

        以降の変更から保護するために、encodedバイト配列のクローンが作成されます。

        パラメータ:
        encoded - このサーバー名のエンコードされたホスト名
        例外:
        NullPointerException - encodednullの場合
        IllegalArgumentException - encodedが不正である場合
    • メソッドの詳細

      • getAsciiName

        public String getAsciiName​()
        このSNIHostNameオブジェクトのStandardCharsets.US_ASCII準拠のホスト名を返します。

        RFC 6066によれば、返されるホスト名は、A-labelを含む国際化ドメイン名である可能性があります。 A-labelの仕様の詳細は、RFC 5890を参照してください。

        戻り値:
        このSNIHostNameオブジェクトのStandardCharsets.US_ASCII準拠のホスト名
      • equals

        public boolean equals​(Object other)
        このサーバー名を指定されたオブジェクトと比較します。

        RFC 6066によれば、DNSホスト名では大文字と小文字は区別されません。 2つのサーバー・ホスト名が等しくなるのは、両者の名前タイプが同じであり、かつ大文字と小文字を区別せずに比較してホスト名が等しくなる場合のみです。

        オーバーライド:
        equals、クラス: SNIServerName
        パラメータ:
        other - 比較する他のサーバー名オブジェクト。
        戻り値:
        otherがこのインスタンスと等しいとみなされた場合にのみtrue
        関連項目:
        Object.hashCode(), HashMap
      • toString

        public String toString​()
        このオブジェクトの文字列表現(このSNIHostNameオブジェクトのDNSホスト名を含む)を返します。

        この表現の厳密な詳細は未指定であり変更される可能性がありますが、典型的な表現は次のようになります。

             "type=host_name (0), value=<hostname>"
         
        「<hostname>」はホスト名のASCII表現であり、A-labelを含む可能性があります。 たとえば、ある擬似的なホスト名の戻り値は次のようになります。
             "type=host_name (0), value=www.example.com"
         
        または
             "type=host_name (0), value=xn--fsqu00a.xn--0zwm56d"
         

        この表現の厳密な詳細は未指定であり、変更される可能性があります。

        オーバーライド:
        toString、クラス: SNIServerName
        戻り値:
        このオブジェクトの文字列表現
      • createSNIMatcher

        public static SNIMatcher createSNIMatcher​(String regex)
        SNIHostNameSNIMatcherオブジェクトを作成します。

        サーバーはこのメソッドを使用することで、受入れ可能なSNIHostNameを検証できます。 次に例を示します。

             SNIMatcher matcher =
                 SNIHostName.createSNIMatcher("www\\.example\\.com");
         
        この場合、ホスト名「www.example.com」が受け入れられます。
             SNIMatcher matcher =
                 SNIHostName.createSNIMatcher("www\\.example\\.(com|org)");
         
        この場合、ホスト名「www.example.com」と「www.example.org」が受け入れられます。
        パラメータ:
        regex - 一致する必要のあるホスト名を表す正規表現パターン
        戻り値:
        SNIHostNameSNIMatcherオブジェクト
        例外:
        NullPointerException - regexnullである場合
        PatternSyntaxException - 正規表現の構文が無効な場合