クラス HpkpHeaderWriter
- java.lang.Object
-
- org.springframework.security.web.header.writers.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)
新しいインスタンスを作成します
メソッドのサマリー
すべてのメソッド インスタンスメソッド 具象メソッド 修飾子と型 メソッド 説明 void
addSha256Pins(java.lang.String... pins)
Public-Key-Pins ヘッダーの pin- ディレクティブの SHA256 ハッシュピンのリストを追加します。void
setIncludeSubDomains(boolean includeSubDomains)
true の場合、固定ポリシーは、この固定されたホストと、ホストのドメイン名のサブドメインに適用されます。void
setMaxAgeInSeconds(long maxAgeInSeconds)
Public-Key-Pins ヘッダーの max-age ディレクティブの値(秒単位)を設定します。void
setPins(java.util.Map<java.lang.String,java.lang.String> pins)
Public-Key-Pins ヘッダーの pin-directive の値を設定します。void
setReportOnly(boolean reportOnly)
Public-Key-Pins ヘッダーを取得するには、これを false に設定する必要があります。そうしないと、ヘッダーは Public-Key-Pins-Report-Only になります。void
setReportUri(java.lang.String reportUri)
ブラウザーがピン検証の失敗を報告する URI を設定します。void
setReportUri(java.net.URI reportUri)
ブラウザーがピン検証の失敗を報告する URI を設定します。void
writeHeaders(javax.servlet.http.HttpServletRequest request, javax.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(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
インターフェースからコピーされた説明:HeaderWriter
Header
インスタンスを作成します。- 次で指定:
- インターフェース
HeaderWriter
のwriteHeaders
- パラメーター:
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 でない場合