AES-256-GCM が見つからない:クライアントの能力か、交渉か
OpenVPN の二つのエラーは似て見える。アルゴリズムのないビルドと、共通の暗号をもたないピアだ。プロファイルを編集する前に --show-ciphers と data-ciphers を読む。
別の環境では動く OpenVPN プロファイルが、AES-256-GCM が見つからない、あるいはピア間に共通の暗号がないと報告し、最初の反応はプロファイルの編集になる。この二つのメッセージは別の失敗を述べている。片方はローカルのプログラムにそのアルゴリズムがないと言い、もう片方は両端にアルゴリズムはあるが共通の選択がないと言う。どちらなのかを知るまで、プロファイルの編集ではどちらも直らない。
正確なエラー文と、それを出した実行ファイルを読む。
どちらのエラーかを決める
暗号が見つからないというメッセージは、パケットを送る前のローカルなオプション解析から出る。目の前の実行ファイル、あるいはそれがリンクするライブラリがそのアルゴリズムを提供していないという意味だ。共通の暗号がないというメッセージは、より後の交渉段階で届き、両側が暗号を支持していても一つに合意できないことを意味する。
区別が重要なのは、片方がソフトウェアのバージョンの問題で、もう片方が設定の問題だからだ。前者はバージョン番号で決まる。後者は二つの一覧を比べて決まる。
ローカルな能力の欠落
古いコミュニティのビルドは現代の既定値より前のもので、デスクトップアプリは隣に導入したコマンドラインのパッケージとは異なる独自のエンジンを同梱することがある。実際に接続を起動した実行ファイルで確認し、古いバイナリに新しいアルゴリズムを教えるのではなく、支持されたビルドを選ぶ。
openvpn --version openvpn --show-ciphers | grep -i gcm openvpn --show-tls | head -5
その一覧に AES-256-GCM がなければ、どのプロファイル行もそれを加えない。解決はより新しいクライアントか別のビルドであり、古い側の制約は別の設計上の問いになる。
OpenVPN 3 系のクライアントでは、エンジンと受け付ける指示がコミュニティの 2.x 系と異なるため、同じプロファイル文が暗号一覧と無関係な理由で失敗することがある。
交渉の欠落
両方のピアがアルゴリズムを並べるとき、残る問いはどちらがどの一覧を出すかだ。コミュニティの OpenVPN は交渉の指示名を変えた。2.4 の ncp-ciphers は 2.5 で data-ciphers になり、2.6 では古い cipher 行は主に互換性と後退のために働き、交渉される集合を決めるものではない。
そのため古い cipher 行だけを変えても交渉の一覧は変わらないことがある。古い行は後退のために今も重要で、それは別の作業だ。二つを混同すると、見えるところで何も変わらない編集になる。
openvpn --version | head -2 grep -n -E '^(data-ciphers|ncp-ciphers|cipher|tls-cipher)' server.conf client.ovpn
両端の一覧とサーバーの拒否メッセージを比べる。共通部分が空なら、別のバージョン向けに書かれた記事から値を写すのではなく、意図して一覧をそろえる。広すぎる一覧はあらゆる接続を静かに弱める。狭すぎる一覧は残したかったピアを排除する。
互換性を明示する
古いピア一つだけのための後退は費用を伴う判断だ。一台の機器をつなぐために配備全体が弱い選択を受け入れる。そう書いておき、必要とするピアに限定する。
結果を決める条件は二つある。エラーがローカルならビルドを入れ替える。エラーが交渉なら両端で一覧をそろえ、どのバージョンを支持するかを記録する。
そのうえで、バージョンと能力の出力を添えて正確なエラーを報告する。この組が欠けたアルゴリズムと不一致を分け、次なる推測の編集を始まる前に止める。