クラス HpkpHeaderWriter

  • 実装されたすべてのインターフェース:
    HeaderWriter

    public final class HpkpHeaderWriter
    extends java.lang.Object
    implements HeaderWriter
    HTTP 公開鍵ピンニング (HPKP) をサポートします。

    セクション 4.1 は、60 日(5,184,000 秒)のオーダーの値が適切なバランスと見なされる可能性があると述べているため、この値をデフォルトとして使用します。これは、setMaxAgeInSeconds(long) を使用してカスタマイズできます。

    付録 B は、オペレーターが最初にレポート専用モードを使用して公開鍵ピンニングをデプロイすることを推奨しているため、このモードをデフォルトとして使用することを選択しました。これは、setReportOnly(boolean) を使用してカスタマイズできます。

    証明書チェーンを検証する必要があるため、"Public-Key-Pins" または "Public-Key-Pins-Report-Only" ヘッダーは、ServletRequest.isSecure() が true を返す場合にのみ追加されます。

    ピンを設定するには、最初に証明書またはキーファイルから公開キー情報を抽出し、Base64 を使用してエンコードする必要があります。次のコマンドは、キーファイル、証明書署名リクエスト、証明書から Base64 でエンコードされた情報を抽出できます。

     openssl rsa -in my-key-file.key -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64
    
     openssl req -in my-signing-request.csr -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
    
     openssl x509 -in my-certificate.crt -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
     
    次のコマンドは、Web サイトの Base64 エンコード情報を抽出します。
     openssl s_client -servername www.example.com -connect www.example.com:443 | openssl x509 -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
     

    いくつかの例:

     Public-Key-Pins: max-age=3000;
                    pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=";
                    pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g="
    
     Public-Key-Pins: max-age=5184000;
                    pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g=";
                    pin-sha256="LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ="
    
     Public-Key-Pins: max-age=5184000;
                    pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g=";
                    pin-sha256="LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=";
                    report-uri="https://example.com/pkp-report"
    
     Public-Key-Pins-Report-Only: max-age=5184000;
                    pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g=";
                    pin-sha256="LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=";
                    report-uri="https://other.example.net/pkp-report"
    
     Public-Key-Pins: max-age=5184000;
                    pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=";
                    pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g=";
                    pin-sha256="LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=";
                    includeSubDomains
     

    導入:
    4.1
    • コンストラクターのサマリー

      コンストラクター  
      コンストラクター 説明
      HpkpHeaderWriter()
      新しいインスタンスを作成します
      HpkpHeaderWriter​(long maxAgeInSeconds)
      新しいインスタンスを作成します
      HpkpHeaderWriter​(long maxAgeInSeconds, boolean includeSubDomains)
      新しいインスタンスを作成します
      HpkpHeaderWriter​(long maxAgeInSeconds, boolean includeSubDomains, boolean reportOnly)
      新しいインスタンスを作成します
    • メソッドのサマリー

      すべてのメソッド   インスタンスメソッド   具象メソッド  
      修飾子と型 メソッド 説明
      voidaddSha256Pins​(java.lang.String... pins)
      Public-Key-Pins ヘッダーの pin- ディレクティブの SHA256 ハッシュピンのリストを追加します。
      voidsetIncludeSubDomains​(boolean includeSubDomains)
      true の場合、固定ポリシーは、この固定されたホストと、ホストのドメイン名のサブドメインに適用されます。
      voidsetMaxAgeInSeconds​(long maxAgeInSeconds)
      Public-Key-Pins ヘッダーの max-age ディレクティブの値(秒単位)を設定します。
      voidsetPins​(java.util.Map<java.lang.String,​java.lang.String> pins)
      Public-Key-Pins ヘッダーの pin-directive の値を設定します。
      voidsetReportOnly​(boolean reportOnly)
      Public-Key-Pins ヘッダーを取得するには、これを false に設定する必要があります。そうしないと、ヘッダーは Public-Key-Pins-Report-Only になります。
      voidsetReportUri​(java.lang.String reportUri)
      ブラウザーがピン検証の失敗を報告する URI を設定します。
      voidsetReportUri​(java.net.URI reportUri)
      ブラウザーがピン検証の失敗を報告する URI を設定します。
      voidwriteHeaders​(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
      Header インスタンスを作成します。
      • クラス java.lang.Object から継承されたメソッド

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • コンストラクターの詳細

      • HpkpHeaderWriter

        public HpkpHeaderWriter​(long maxAgeInSeconds,
                                boolean includeSubDomains)
        新しいインスタンスを作成します
        パラメーター:
        maxAgeInSeconds - setMaxAgeInSeconds(long) にマップ
        includeSubDomains - setIncludeSubDomains(boolean) にマップ
      • HpkpHeaderWriter

        public HpkpHeaderWriter​(long maxAgeInSeconds)
        新しいインスタンスを作成します
        パラメーター:
        maxAgeInSeconds - setMaxAgeInSeconds(long) にマップ
      • HpkpHeaderWriter

        public HpkpHeaderWriter()
        新しいインスタンスを作成します
    • メソッドの詳細

      • writeHeaders

        public void writeHeaders​(javax.servlet.http.HttpServletRequest request,
                                 javax.servlet.http.HttpServletResponse response)
        インターフェースからコピーされた説明: HeaderWriter
        Header インスタンスを作成します。
        次で指定:
        インターフェース HeaderWriterwriteHeaders 
        パラメーター:
        request - リクエスト
        response - レスポンス
      • setPins

        public void setPins​(java.util.Map<java.lang.String,​java.lang.String> pins)

        Public-Key-Pins ヘッダーの pin-directive の値を設定します。

        pin ディレクティブは、Web ホストオペレーターが特定の Web ホストにバインドする必要のある暗号化 ID を示す方法を指定します。詳細については、セクション 2.1.1 を参照してください。

        Public-Key-Pins のピンを取得するには: pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM ="; pin-sha256="E9CZ9INDbd + 2eRQozYqqbQ2yXLVKB9 + xcprMF + 44U1g ="  Map<String, String> pins = new HashMap<String, String>(); pins.put("d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=", "sha256"); pins.put("E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g=", "sha256"); を使用

        パラメーター:
        pins - base64 でエンコードされた SPKI フィンガープリントと暗号化ハッシュアルゴリズムのペアのマップ。
        例外:
        java.lang.IllegalArgumentException - ピンが null の場合
      • addSha256Pins

        public void addSha256Pins​(java.lang.String... pins)

        Public-Key-Pins ヘッダーの pin- ディレクティブの SHA256 ハッシュピンのリストを追加します。

        pin ディレクティブは、Web ホストオペレーターが特定の Web ホストにバインドする必要のある暗号化 ID を示す方法を指定します。詳細については、セクション 2.1.1 を参照してください。

        Public-Key-Pins-Report-Only のピンを取得するには: pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM ="; pin-sha256="E9CZ9INDbd + 2eRQozYqqbQ2yXLVKB9 + xcprMF + 44U1g =" HpkpHeaderWriter を使用 hpkpHeaderWriter = new HpkpHeaderWriter(); hpkpHeaderWriter.addSha256Pins("d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM"、"E9CZ9INDbd + 2eRQozYqqbQ2yXLVKB9 + xcprMF + 44U1g =");

        パラメーター:
        pins - base64 でエンコードされた SPKI フィンガープリントのリスト。
        例外:
        java.lang.IllegalArgumentException - ピンが null の場合
      • setMaxAgeInSeconds

        public void setMaxAgeInSeconds​(long maxAgeInSeconds)

        Public-Key-Pins ヘッダーの max-age ディレクティブの値(秒単位)を設定します。デフォルトは 60 日です。

        これは、ブラウザーが(メッセージの受信元である)ホストを既知の固定ホストと見なす期間を指示します。詳細については、セクション 2.1.2 を参照してください。

        Public-Key-Pins-Report-Only のようなヘッダーを取得するには: max-age = 2592000; pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM ="; pin-sha256="E9CZ9INDbd + 2eRQozYqqbQ2yXLVKB9 + xcprMF + 44U1g =" HpkpHeaderWriter を使用 hpkpHeaderWriter = new HpkpHeaderWriter(); hpkpHeaderWriter.setMaxAgeInSeconds(TimeUnit.DAYS.toSeconds(30));

        パラメーター:
        maxAgeInSeconds - ホストを既知の固定ホストと見なす最大時間(秒単位)。(つまり、TimeUnit.DAYS.toSeconds(30) はこれを 30 日に設定します)
        例外:
        java.lang.IllegalArgumentException - maxAgeInSeconds が負の場合
      • setIncludeSubDomains

        public void setIncludeSubDomains​(boolean includeSubDomains)

        true の場合、固定ポリシーは、この固定されたホストと、ホストのドメイン名のサブドメインに適用されます。デフォルトは false です。

        詳細については、セクション 2.1.3 を参照してください。

        Public-Key-Pins-Report-Only のようなヘッダーを取得するには: max-age = 5184000; pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM ="; pin-sha256="E9CZ9INDbd + 2eRQozYqqbQ2yXLVKB9 + xcprMF + 44U1g ="; includeSubDomains これを true に設定する必要があります。

        パラメーター:
        includeSubDomains - サブドメインを含める場合は true、それ以外の場合は false
      • setReportOnly

        public void setReportOnly​(boolean reportOnly)

        Public-Key-Pins ヘッダーを取得するには、これを false に設定する必要があります。そうしないと、ヘッダーは Public-Key-Pins-Report-Only になります。レポート専用モードの場合、ブラウザーはサーバーとの接続を終了しないでください。デフォルトでは、これは true です。

        詳細については、セクション 2.1 を参照してください。

        Public-Key-Pins のようなヘッダーを取得するには: max-age = 5184000; pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM ="; pin-sha256="E9CZ9INDbd + 2eRQozYqqbQ2yXLVKB9 + xcprMF + 44U1g =" これは false にする必要があります。

        パラメーター:
        reportOnly - 報告する場合のみ true、それ以外の場合は false
      • setReportUri

        public void setReportUri​(java.net.URI reportUri)

        ブラウザーがピン検証の失敗を報告する URI を設定します。

        詳細については、セクション 2.1.4 を参照してください。

        Public-Key-Pins-Report-Only のようなヘッダーを取得するには: max-age = 5184000; pin-sha256="E9CZ9INDbd + 2eRQozYqqbQ2yXLVKB9 + xcprMF + 44U1g ="; pin-sha256="LPJNul + wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ ="; report-uri="https://other.example.net/pkp-report" HpkpHeaderWriter を使用 hpkpHeaderWriter = new HpkpHeaderWriter(); hpkpHeaderWriter.setReportUri(new URI("https://other.example.net/pkp-report"));

        パラメーター:
        reportUri - ブラウザーがレポートを送信する URI。
      • setReportUri

        public void setReportUri​(java.lang.String reportUri)

        ブラウザーがピン検証の失敗を報告する URI を設定します。

        詳細については、セクション 2.1.4 を参照してください。

        Public-Key-Pins-Report-Only のようなヘッダーを取得するには: max-age = 5184000; pin-sha256="E9CZ9INDbd + 2eRQozYqqbQ2yXLVKB9 + xcprMF + 44U1g ="; pin-sha256="LPJNul + wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ ="; report-uri="https://other.example.net/pkp-report" HpkpHeaderWriter を使用 hpkpHeaderWriter = new HpkpHeaderWriter(); hpkpHeaderWriter.setReportUri("https://other.example.net/pkp-report");

        パラメーター:
        reportUri - ブラウザーがレポートを送信する URI。
        例外:
        java.lang.IllegalArgumentException - reportUri が有効な URI ではない場合