フィンガープリントは、何を期待すべきかを教えてくれた経路と同じだけしか信頼できません。比較する値が、いま検証しているのと同じ接続で届いたなら、その比較が示すのは、その接続を支配している側が一貫しているという事実だけです。確認は決まった順序で行うべきであり、失敗した手順は次へ進ませるのではなく、そこで止めるべきです。VPNクライアントが証明書の変更を報告したとき、私が使う順序は次のとおりです。

値を名指しする前に、対象を名指しする

期待値がサーバーのリーフ証明書のものか、発行したCAのものか、リーフ内の公開鍵のものかを決めます。これは三つの別の確認であり、失敗の仕方もそれぞれ異なります。一致したCAのフィンガープリントはサーバーを固定しませんし、公開鍵のハッシュは、同じ鍵を保つ再発行を意図的に生き延びます。

アルゴリズムも書き留めます。SHA-256が現在の標準的な期待値ですが、古いツールは別を指定しない限りSHA-1を出力していましたし、40文字の十六進値は、これから別のものを二つ比べようとしている兆候です。

期待値を第二の経路で取り寄せる

第二の経路は、あなたが警戒している相手が書き込めない経路でなければなりません。すでに認証しているプロビジョニングシステム、金庫に保管された印刷記録、構成データベース、別のプロセスが届ける署名済み文書は、いずれも該当します。同僚からのチャットメッセージ、検索結果からたどり着いたサポートページ、いまデバッグしている端末に貼り付けられたものは、該当しません。

完全な値とアルゴリズムを求め、決して前置きの一部だけを求めないことです。コロンや大文字小文字は問題ではありませんが、切り詰めると256ビットの確認が当て推量のゲームになります。

独立した情報源から期待値を出せる人がいないなら、正直な結論は、この証明書は今日は検証できないということです。そう言うほうが、クライアントがたったいま表示したものを固定するよりましで、後者は警告を習慣に変えてしまいます。

自分の側で値を取り出す

証明書ファイルの場合は、コマンドは openssl x509 -in server.crt -noout -fingerprint -sha256 です。明示的なダイジェストが重要で、指定しないと出力はOpenSSLのバージョンに依存します。結果はコロンで区切られた十六進文字列なので、コロンを除き、比較する前に両側を小文字にそろえます。

TLSを直接話すエンドポイントの場合は、接続して証明書をパイプで取り出します: openssl s_client -connect vpn.example.com:443 -servername vpn.example.com < /dev/null | openssl x509 -noout -fingerprint -sha256。これはWeb管理パネルやTLSリスナーには使えますが、制御チャネルがトンネルの内側にある OpenVPN には使えません。OpenVPNの場合は、ソケットから捕まえようとせず、ディスク上のプロファイルから証明書を読み取ります。

比較は機械的に行うべきです。tr -d ':' と大文字小文字の統一で両方の値を正規化し、そのうえで文字列全体を比較します。目で見て比べるのが、一致する前置きが最後のバイトの不一致を隠す手口です。文字列が異なるなら、説明を探す前に、その違いを現実のものとして扱ってください。

停止条件

対象が異なる場合は、CAのフィンガープリントはリーフ証明書を晴らせずリーフもCAを晴らせないので、止めます。アルゴリズムが異なる場合は、SHA-1の値とSHA-256の値を比べても何も分からないので、止めます。フィンガープリントが一致しても、証明書が期限切れ、失効、あるいは別名で発行されている場合は、一致するハッシュは有効性の確認ではなく壊れた連鎖を修復もしないので、止めます。シリアル番号が照合先の記録のシリアル番号と一致しない場合も、差し替えられた証明書を見つける最も安価な方法だから止めます。

新しい値が、いま検証していた経路で届いたなら止めます。ローテーションはフィンガープリントを正当に変えられますが、差し替えの値はやはり信頼できるプロセスから来るべきで、問いを引き起こした警告ダイアログからではありません。

提案された修正が、ホスト名の検証や連鎖の検証を切ることなら止めます。フィンガープリントは通常の確認に制約を一つ加えるもので、置き換えるものではありませんが、配備が意図的にピン専用のモデルを選んだ場合に限り、その選択には運用上のコストが伴います。

比較のあとで

何を比較し、期待値がどこから来て、いつだったのかを記録します。証明書が再発行されたなら、同じ信頼経路で保存済みの期待値を更新し、次のローテーションを監査可能にするシリアル番号を新しく書き留めます。

そのうえで限界をはっきりさせます。フィンガープリントが確認するのは、手元の証明書が、誰かが期待するよう伝えたものだという点だけです。ホストが侵害されていないことについては何も語りませんし、その証明書がどこまで到達できるかをサービスが記録しているか制限しているかについても何も語りません。

関連記事