VPN 証明書を鍵を漏らさずに調べる
証明書の公開フィールドを読むのに、対応する秘密鍵を表示する必要はありません。そのための道具は VPN を終端するあらゆるシステムに備わっています。危険はその一歩手前にあります。渡されたファイルが証明書とは限らないのです。
証明書の公開フィールドを読むのに、対応する秘密鍵を表示する必要はなく、そのための道具は VPN を終端するあらゆるシステムに備わっています。危険はその一歩手前にあり、渡されたファイルが証明書とは限らないのです。PEM 証明書、DER のバイナリ、PKCS#12 のバンドル、そして OpenVPN のプロファイルは同じ名前で届きながら中身はまるで違いうるので、コマンドを選ぶ前にコンテナの種類を見極めてください。
安全なコマンドは、ファイルに何が入っているか、そこから何を読み出すか、その出力を誰が見るかという三つの事実で決まります。どれか一つを誤ると、検査そのものがインシデントになります。
渡されたのは三つのうちどれか
PEM 証明書は BEGIN と END の印が見えるテキストで、DER ファイルは入力形式のフラグを要するバイナリであり、バンドルは証明書の隣に鍵を抱えうるコンテナです。file server.crt はテキストとバイナリを一瞬で見分け、先頭行を一瞥すれば素の証明書と証明書を埋め込んだプロファイルも見分けられます。ここで当て推量をすると、検査がインシデントに変わります。
ファイルが証明書ではなくプロファイルなら、反証が出るまで資格情報として扱ってください。この前提は何のコストもかからず、この作業全体で最も多い誤りを防ぎます。
PEM 証明書の公開フィールドを読む
検査を許可された証明書なら、x509 サブコマンドに -noout を付けると、選んだフィールドだけを出力し、それ以外は何も出しません。本文を抑えることで出力はメタデータだけになり、チケットへの貼り付けも安全になります。以下のセレクタは公開情報のもので、openssl x509 のドキュメント に残りが載っています。
openssl x509 -in server.crt -noout -subject -issuer -dates -fingerprint -sha256
ローカルで生成した試験用証明書では、このコマンドは subject と issuer の行、notBefore と notAfter の組、そして SHA-256 の指紋を一つ出力します。これらのフィールドは対象を識別するだけで、有効な信頼の連鎖を確立するものではなく、その確立は独自のコマンドと独自の答えを持つ別の検証作業です。チェーンファイルは、自分でファイルを反復しない限り最初の証明書しか出力しないこともあります。この方法で二つのファイルを比べれば、コマンド一つでどちらをピアが実際に提示しているかが決まります。
証明書の隣に鍵を抱えるバンドル
拡張子 .p12または .pfx のファイルは秘密鍵を運ぶことがあり、解析コマンドは出力のその部分を抑えない限りそれを表示します。次に -nokeys を付ければ、同じコマンドでもコンテナの構造を、隠された鍵バッグも含めて報告しつつ鍵素材は一切出力せず、このフラグを外すと鍵ブロックが端末とシェルの履歴に現れます。
openssl pkcs12 -in bundle.p12 -nokeys -info -passin env:P12PASS
OpenVPN のプロファイルは同じ素材をテキストとして埋め込むので、どこを見るべきか分かっていれば境界は見えます。公開素材は BEGIN CERTIFICATE と END CERTIFICATE の間にあり、BEGIN PRIVATE KEY と対応する END 行の間にあるものは鍵で、ホストの外に出してはなりません。プロファイルを丸ごとコピーすると、その両方が公開されます。
参照値を別の経路から得る
検証しようとしている接続から読んだ指紋は、信頼していない相手が渡したものなので何も証明しません。これは指紋への反論ではなく、出どころについての話です。値を、ピアが書き込めない経路で得た値、たとえば社内リポジトリで公開されている証明書や署名済みの変更記録に印字されたハッシュと比べてください。
信頼ストアが検証を行うなら、それに任せ、独自の比較で置き換えるのではなく、出てきたエラーを読んでください。重要なのはどのハッシュ関数を使ったかではなく、参照値を誰が提供したかです。
結果を共有するとき、うっかりした後の始末
検証エラーの正確な文言、関係する日付、そして受け手が必要とする識別情報だけを送ってください。内部ホスト名やアカウント識別子は、鍵がなくても機微なままであり、公開のペーストサービスはそのどれにとっても間違った宛先です。貼り付け先はチケットであり、誰かと共有する一時バッファではありません。
鍵素材が画面やファイルに現れてしまったら、誰も見ていないことに賭けるのではなく、漏えいしたものとして扱ってローテーションし、そのうえで、検査したファイル、使ったコマンド、出力の行き先を書き留めてください。その記録が恐怖を手順に変えるからです。誰もスクリーンショットを撮っていないと仮定する代償に比べれば、ローテーションは安く、同じ記録が次の担当者にどのファイルに触れたかを伝えます。チケットを閉じる前に、この二つを済ませてください。