古いVPNプロファイルに残る廃れた暗号行:コピーする前に読む
指令はバージョン変更を越えて、別の意味で、あるいはまったく意味を持たずに残る。プロファイルを書いたクライアントと、トンネルが実際に交渉した内容を確認する。
このプロファイルは2016年に書かれ、今もインポートでき、今も接続できる。だからこそ誰も見ない。かつてこれらの指令を読んでいたクライアントはとうに消え、現在のビルドはそのいくつかを別の形で解釈するかもしれない。
ファイルが残っていることは、設定が最新であることを意味しない。この二つの考えを切り分けることが作業の大半だ。
どのクライアントがプロファイルを書いたか調べる
発行元とバージョンから始める。指令の意味は、それを読む実装によって定義される。かつてアルゴリズムを選んでいた行が、フォールバック一覧や警告、あるいは厳格なエラーになることがある。どのリリースが解釈するかが結果を決める。
OpenVPNが最も明確な例だ。バージョン2.5はdata-ciphersを導入し、古いcipher指令が交渉にどう関わるかを変えた。cipher AES-128-CBCだけを持つプロファイルは今、作者が意図したよりずっと狭い提案になる。
今は警告や失敗になる設定について、リリースノートを読む。ログの警告は現在のビルドに関する事実であり、その行がなぜ追加されたかについての誰かの記憶より重い。
実際に何が交渉されたかを見る
インポートの成功は解析を証明するが、ポリシーを証明しない。交渉された結果は接続が確立した後にクライアントのログに現れる。設定ファイルの両端とは異なることがある。
# OpenVPN: what did this session agree on?
sudo journalctl -u openvpn-client@office --since '5 min ago' | grep -i 'cipher\|Data Channel'
# which directives does the profile actually carry?
grep -n -E 'cipher|auth|tls-|dh ' office.ovpn指令を静かに落とす受け入れ済みのインポートは、読み方は一つ、振る舞いは別というプロファイルを残す。そのずれが、堅牢と記された文書が自分の本文の主張より弱いものを交渉する理由だ。違いが現れるのはログだけだ。ファイルを信じる前にそれを読む。
行ではなく仕組みを更新する
インポートが文句を言わなくなるまでアルゴリズム名を寄せ集めるのではなく、運用者が保守するプロファイルを入手する。試行で行を足すのは修正の方向を逆にする。サーバーが何を支えるかを確かめるのではなく、クライアントを未知のサーバーに合わせてしまう。
サーバー側にも協調した更新が必要かもしれない。現行のクライアントは、相手が決して提示しない提案への対応を作り出せない。未更新のゲートウェイをクライアント側の選択肢で置き換えることはできない。
犠牲にしてはならないのは検証だ。証明書の確認を外し、ホスト名の確認を切り、更新を止めて古いプロファイルを生かすことは、互換性の問題を信頼の問題に変える。たいていは一度に一つの小さな編集で起こる。
結果を確認し、例外を記録する
変更後、交渉されたスイートをもう一度確認し、トンネルが存在する目的のリソースを試す。意図どおりに交渉してもサービスに届かないプロファイルは、経路か身元の問題を抱えている。暗号の問題ではない。
以前の正常性が確認された設定を保護された場所に保管する。古いファイルが存在する間だけ比較できる。
互換性の例外は、担当者と見直し日を添えて記録する。誰も所有しない暫定措置は恒久的な方針になる。次にファイルを読む人は、意図的に選ばれたと考えるだろう。