証明書ピンニングとは、アプリケーションが通信先サーバーの TLS 証明書 (または公開鍵) を事前に固定し、接続時に提示された証明書が固定値と一致しない場合に通信を拒否するセキュリティ技術である。不正な認証局が発行した偽の証明書を使う中間者攻撃 (MITM) への対策として使われる。
モバイルアプリでの実装の例として、iOS では URLSession のデリゲートメソッド、Android では Network Security Config で証明書の公開鍵のハッシュ値を指定する。短縮 URL アプリでは、リダイレクト先の取得時に MITM 攻撃を受けると、ユーザーが悪意あるサイトに誘導される危険がある。
かつて Web ブラウザー向けには HTTP Public Key Pinning (HPKP) が標準化されていたが、Google は利用の少なさとサービス拒否などのリスクを理由に、Chrome 72 で HPKP を削除すると告知している。Certificate Transparency (CT) は、発行された証明書を公開のログに記録し、不正な発行を見つけられるようにする仕組みである。
証明書ピンニングの運用上の課題は、証明書のローテーション時にアプリの更新が必要になる点である。バックアップピンの設定や、中間証明書レベルでのピンニングにより、ローテーション時の影響を緩和できる。
短縮 URL サービスでは、API 通信の保護に証明書ピンニングを使い、CT ログの監視で不正な証明書の発行を検出する組み合わせ方もある。