証明書ピンニング(Certificate Pinning)
別名:証明書のピン留め
証明書ピンニング(Certificate Pinning)とは、通信時に利用するサーバー証明書をあらかじめ「固定(ピン留め)」しておくことで、なりすましや中間者攻撃を防ぐしくみです。スマートフォンアプリやWebサービスなど、HTTPS通信を行うシステムでよく利用されます。
通常、Webブラウザやアプリがサーバーに接続するときは、サーバーが提示する証明書を「認証局(CA)」のチェーンを通じて確認します。このとき、もし不正に発行された証明書を攻撃者が用意していた場合、ユーザーが気付かないうちに偽のサーバーへ誘導されてしまうおそれがあります。具体的には、CAによる誤発行やCAの侵害、悪意ある中間CAの存在などが挙げられます。
このような事態を防ぐために、アプリ側に「正しい証明書」や「公開鍵の情報」を事前に登録しておくのが証明書ピンニングです。
例えば、アプリに「この公開鍵のサーバーとしか通信しない」と設定しておけば、攻撃者が別の証明書を使って通信を装っても、検証に失敗し接続が拒否されます。つまり、信頼できるサーバーとの通信を保証する「最後の見張り役」といえるでしょう。
一方で、便利なしくみである反面、運用には注意が必要です。もしサーバー側で証明書を更新したのに、アプリのピン情報を更新していなければ、正しい通信まで遮断してしまいます。そのため、証明書の更新タイミングとアプリのリリース管理を慎重に行う必要があります。
例えば、Webブラウザでの証明書ピンニングとしてHPKPがありましたが、運用ミスでサイトを長期間ブロックするなどの事故が相次いだため、主要なWebブラウザは廃止しました。最近では、複数の公開鍵情報をあらかじめ登録しておく「バックアップピン」など、柔軟に運用できる方法も用いられています。
証明書ピンニングは、特に金融アプリや企業システムのように「通信の安全性が命」という環境で大きな効果を発揮します。信頼の証明を“システムの中に埋め込む”しくみともいえるでしょう。セキュリティを通信の根本から支える大切な技術ですね。
用語解説の監修:増井 敏克