クラス HpkpHeaderWriter

java.lang.ObjectSE
org.springframework.security.web.header.writers.HpkpHeaderWriter
実装されたすべてのインターフェース:
HeaderWriter

@DeprecatedSE public final class HpkpHeaderWriter extends ObjectSE 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(long maxAgeInSeconds)
    使用すべきではありません。
    新しいインスタンスを作成します
    HpkpHeaderWriter(long maxAgeInSeconds, boolean includeSubDomains)
    使用すべきではありません。
    新しいインスタンスを作成します
    HpkpHeaderWriter(long maxAgeInSeconds, boolean includeSubDomains, boolean reportOnly)
    使用すべきではありません。
    新しいインスタンスを作成します
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    void
    使用すべきではありません。
    Public-Key-Pins ヘッダーの pin- ディレクティブの SHA256 ハッシュピンのリストを追加します。
    void
    setIncludeSubDomains(boolean includeSubDomains)
    使用すべきではありません。
    true の場合、固定ポリシーは、この固定されたホストと、ホストのドメイン名のサブドメインに適用されます。
    void
    setMaxAgeInSeconds(long maxAgeInSeconds)
    使用すべきではありません。
    Public-Key-Pins ヘッダーの max-age ディレクティブの値(秒単位)を設定します。
    void
    使用すべきではありません。
    Public-Key-Pins ヘッダーの pin-directive の値を設定します。
    void
    setReportOnly(boolean reportOnly)
    使用すべきではありません。
    Public-Key-Pins ヘッダーを取得するには、これを false に設定する必要があります。そうしないと、ヘッダーは Public-Key-Pins-Report-Only になります。
    void
    使用すべきではありません。
    ブラウザーがピン検証の失敗を報告する URI を設定します。
    void
    setReportUri(URISE reportUri)
    使用すべきではありません。
    ブラウザーがピン検証の失敗を報告する URI を設定します。
    void
    writeHeaders(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response)
    使用すべきではありません。
    Header インスタンスを作成します。

    クラス java.lang.ObjectSE から継承されたメソッド

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

    • HpkpHeaderWriter

      public HpkpHeaderWriter(long maxAgeInSeconds, boolean includeSubDomains, boolean reportOnly)
      使用すべきではありません。
      新しいインスタンスを作成します
      パラメーター:
      maxAgeInSeconds - setMaxAgeInSeconds(long) にマップ
      includeSubDomains - setIncludeSubDomains(boolean) にマップ
      reportOnly - setReportOnly(boolean) にマップ
    • 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(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response)
      使用すべきではありません。
      インターフェースからコピーされた説明: HeaderWriter
      Header インスタンスを作成します。
      次で指定:
      インターフェース HeaderWriterwriteHeaders 
      パラメーター:
      request - リクエスト
      response - レスポンス
    • setPins

      public void setPins(MapSE<StringSE,StringSE> 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 フィンガープリントと暗号化ハッシュアルゴリズムのペアのマップ。
      例外:
      IllegalArgumentExceptionSE - ピンが null の場合
    • addSha256Pins

      public void addSha256Pins(StringSE... 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 フィンガープリントのリスト。
      例外:
      IllegalArgumentExceptionSE - ピンが 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 日に設定します)
      例外:
      IllegalArgumentExceptionSE - 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(URISE 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(StringSE 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。
      例外:
      IllegalArgumentExceptionSE - reportUri が有効な URI ではない場合