証明書ピンニングとは、アプリケーションが通信先サーバーの TLS 証明書 (または公開鍵) を事前に固定し、接続時に提示された証明書が固定値と一致しない場合に通信を拒否するセキュリティ技術である。中間者攻撃 (MITM) や不正な認証局による偽証明書の発行を検出・防止する。
モバイルアプリでの実装が一般的であり、iOS では URLSession のデリゲートメソッド、Android では Network Security Config で証明書のハッシュ値を指定する。短縮 URL アプリにおいては、リダイレクト先の取得やクリック計測データの送信時に MITM 攻撃を受けると、ユーザーが悪意あるサイトに誘導される危険があるため、証明書ピンニングの実装が推奨される。
かつて Web ブラウザ向けには HTTP Public Key Pinning (HPKP) が標準化されていたが、設定ミスによるサイト接続不能のリスクが高く、2018 年に Chrome が対応を廃止した。現在は Certificate Transparency (CT) が代替手段として機能している。CT はすべての認証局に対し、発行した証明書を公開ログに記録することを義務付け、不正発行を検出可能にする仕組みである。
証明書ピンニングの運用上の課題は、証明書のローテーション時にアプリの更新が必要になる点である。バックアップピンの設定や、中間証明書レベルでのピンニングにより、ローテーション時の影響を緩和できる。
短縮 URL サービスでは、API 通信の保護に証明書ピンニングを適用しつつ、CT ログの監視で不正証明書の発行を早期検出する多層防御が望ましい。