03-6758-0529

(10:00〜18:00 土日祝日を除く)

SSL・EV SSL サーバー証明書 サポート

「Public Key Pinning Extension for HTTP(HPKP)」で証明書の不正利用を防止する

pinning(証明書のピン留め)とも呼ばれる「Public Key Pinning Extension for HTTP(HPKP)」は、SSL/TLS証明書の不正利用を防止する方法です。
HPKPが設定されたサーバーは、鍵交換時に公開鍵のハッシュ値をブラウザに渡します。
HPKPに対応しているブラウザ(Crome, Firefox)は、サーバーが指定した期間このハッシュ値を保持します。
ブラウザは、サーバーが指定した期間内に再度アクセスがあった際、保持しているハッシュ値と一致する公開鍵をサーバーが提供しない場合、不正なサーバ証明書が利用されていると判断します。

WebサーバーでHPKPを有効にする

HTTPヘッダ

HTTPヘッダとして「Public-Key-Pins」あるいは「Public-Key-Pins-Report-Only」を返します。

Public-Key-Pins の例:
Public-Key-Pins: pin-sha256=”base64==”; max-age=expireTime [; includeSubDomains][; report-uri=”reportURI”]
Public-Key-Pins-Report-Only の例:
Public-Key-Pins-Report-Only: pin-sha256=”base64==”; max-age=expireTime [; includeSubDomains][; report-uri=”reportURI”]

公開鍵のハッシュ値を取得しBase64エンコードする

証明書に公開鍵が含まれていますので、以下のコマンドを実行し、SSL/TLS証明書から公開鍵のハッシュ値を取得しBase64エンコードします。

openssl x509 -in your.crt -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64

証明書要求 (CSR) にも公開鍵が含まれていますので、以下のコマンドを実行し、CSRから公開鍵のハッシュ値を取得しBase64 エンコードします。

openssl req -in your.csr -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64

指定できる公開鍵は、ドメインのSSL/TLSサーバ証明書から、その証明書のrootにいたる階層に含まれる公開鍵であればどれでも利用できます。

HTTPヘッダの事例と指定の注意事項

以下の事例についてそれぞれの意味と指定の注意事項を説明します。

Public-Key-Pins: pin-sha256=”si41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJgF=”; pin-sha256=”EVw989IlUxkcjRcE2SO2ISTXIsInsdj3x7K8QrZbHec=”; max-age=5184000; includeSubDomains; report-uri=”https://nydomain/hpkp-report”

Web サーバでの設定例

Apache

mod_headersモジュールがインストールされている必要があります。Webサーバーのconfigの該当VirtualHostディレクティブに以下のように記述します。

Header always set Public-Key-Pins “pin-sha256=\”si41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJgF=\”; pin-sha256=\”EVw989IlUxkcjRcE2SO2ISTXIsInsdj3x7K8QrZbHec=\”; max-age=5184000; includeSubDomains”

Nginx

ngx_http_headers_moduleがインストールされている必要があります。以下をVirtualHostの設定に加えます。

add_header Public-Key-Pins ‘pin-sha256=”si41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJgF=”; pin-sha256=”EVw989IlUxkcjRcE2SO2ISTXIsInsdj3x7K8QrZbHec=”; max-age=5184000; includeSubDomains’ always;

IIS

Web.configファイルに以下を追加してください。

<httpProtocol>
<customHeaders>
<add name=”Public-Key-Pins” value=”pin-sha256="si41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJgF="; pin-sha256="EVw989IlUxkcjRcE2SO2ISTXIsInsdj3x7K8QrZbHec="; max-age=5184000; includeSubDomains” />
</customHeaders>
</httpProtocol>

Copyright © Sophia Research Institute,Ltd. All rights reserved.