クラス HpkpHeaderWriter
- 実装されたすべてのインターフェース:
HeaderWriter
セクション 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
addSha256Pins
(StringSE... pins) 使用すべきではありません。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
setReportUri
(StringSE reportUri) 使用すべきではありません。ブラウザーがピン検証の失敗を報告する URI を設定します。void
setReportUri
(URISE reportUri) 使用すべきではありません。ブラウザーがピン検証の失敗を報告する URI を設定します。void
writeHeaders
(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) 使用すべきではありません。Header
インスタンスを作成します。
コンストラクターの詳細
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
インスタンスを作成します。- 次で指定:
- インターフェース
HeaderWriter
のwriteHeaders
- パラメーター:
request
- リクエストresponse
- レスポンス
setPins
使用すべきではありません。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-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
使用すべきではありません。ブラウザーがピン検証の失敗を報告する 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
使用すべきではありません。ブラウザーがピン検証の失敗を報告する 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 ではない場合