【しょうめいしょぴんにんぐ】

証明書ピンニング とは?

最終更新:
💡 通常のTLS検証に「この鍵も確認」を追加する

通常のTLS証明書検証に加え、接続先の証明書や公開鍵をあらかじめ指定したものに制限する手法。公開鍵ピンと、鍵の更新で接続が止まる運用上の注意を説明します。

📌 このページのポイント
ピンニング:TLSに制限を追加通常のTLS検証証明書の信頼性などを確認登録した鍵も照合公開鍵を指定する方式の例一致:接続へ両方の条件を満たす不一致:拒否正規の鍵変更でも止まる必要性と、鍵の更新・復旧方法を検討する
通常のTLS検証を通った接続先に、さらに公開鍵の照合を行う例。登録していない鍵への変更は、正規のサーバーでも接続失敗の原因になります。
ひよこ ひよこ
証明書ピンニングって、普通のTLSと何が違うの?
ペンギン先生 ペンギン先生
通常のTLSでは信頼する認証局などを使って接続先を検証する。ピンニングはそこに「指定した証明書や公開鍵であること」という制限を追加するんだ。通常の検証を省略する仕組みではないよ。
ひよこ ひよこ
どの情報を照合するの?
ペンギン先生 ペンギン先生
例えばAndroidのNetwork Security Configurationでは、証明書の公開鍵情報SPKIをSHA-256でハッシュ化して登録する。接続先の証明書チェーンに登録した公開鍵があるかを確認するよ。証明書全体のハッシュと公開鍵のハッシュは同じものではないんだ。
ひよこ ひよこ
証明書を更新したら接続できなくなる?
ペンギン先生 ペンギン先生
何を固定したかによるよ。公開鍵を固定した場合、同じ鍵のまま証明書を更新すれば、ピン自体は変わらない。一方、登録していない鍵への切替は正規の更新でも接続を止める。予備の鍵やアプリへの設定配布、復旧の方法を事前に計画しよう。
ひよこ ひよこ
全てのアプリで使うべき?
ペンギン先生 ペンギン先生
一律には勧められないよ。Appleは多くの場合、標準のTLS検証で要件を満たせるとして、必要な場合に慎重に採用するよう案内している。信頼先をさらに制限する必要と、鍵の変更で利用者の接続が止まるリスクを合わせて判断するんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「証明書ピンニング」って出てきたら「TLSの接続先を、あらかじめ指定した証明書や鍵に絞る仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Certificate pinning」 = 証明書をピン留めすること
💬 Pinningは対象を固定する意味です。証明書そのものを指定する方式と、その公開鍵を指定する方式があります。両者では更新時の影響が異なります。

参考資料

← 用語集にもどる