8192ビット鍵がハンドシェイクを停滞させ、1024ビットDHは拒否される
逆方向の修正を要する二つのサイズ不具合。大きすぎる鍵は相手のタイムアウトまでハンドシェイク時間を焼き、小さすぎるDHグループは始まる前に拒否される。
あるサーバーではクライアントがしばらく固まってから再接続し、別のサーバーでは鍵のサイズに関するメッセージとともに接続を即座に拒否する。別々のバグに見えるが、同じバグが逆向きを指しているだけだ。ハンドシェイクの暗号処理にはパラメーターのサイズに比例して増えるコストがあり、現代のライブラリが下回らない下限もある。材料のサイズを決めることがチェックリストであり、最初の項目は二つの不具合のどちらが実際に起きているかを見極めることだ。
何かを再生成する前に失敗を読む
タイミングがほとんどのことを教えてくれる。数秒かけてから落ちるハンドシェイクは、計算が相手の我慢を超えたことを通常意味し、ハードウェアやタイムアウトに対してパラメーターが大きすぎることを示す。鍵やグループのサイズを名指しする即時の拒否は逆方向を指し、ライブラリがまったく受け付けない材料を示している。
この二つは逆の修正を必要とし、ここでほとんどの試みが間違える。小さなグループをすでに拒否したクライアントで8192ビットのパラメーターを再生成すると、遅いケースは悪化し、速いケースには何の効果もない。ファイルに触れる前に、観察した症状を書き留める。
次に、相手に何を求めているかを確認する。大きな有限体グループ向けに設定されたサーバーは、接続時だけでなく再ネゴシエーションのたびに、すべてのクライアントに同じCPU時間を費やさせる。問題が起動時ではなく一定間隔で現れるなら、その間隔はどの設定が高コストかの強い手がかりだ。再ネゴシエーションは計算全体を繰り返すので、毎時間繰り返す停止は通常、同じコストを再び払っているだけだ。
遅いケース:ハードウェアが支払えない材料
Diffie-HellmanとRSAの処理は鍵のサイズとともに急速に増え、そのすべてがトンネルにトラフィックが流れる前に起きる。小さなルーターや低電力のクライアントでは、十分に大きなグループが交換を相手側のタイムアウトの先へ押し出し、接続が再試行されるか、エラーなしで単に固まって見える。
修正は、すべての相手が対応し、すべての機器が無理なく計算できるサイズまで下げることだ。2048ビットのRSA鍵と2048ビットのグループは広く互換な基準線であり続ける。より大きくするのは、すべての相手が同意し、CPUが再ネゴシエーションのたびにそのコストを払える場合にだけ役立つ。その基準線を超えるものは意図的なトレードオフであり、アップグレードではない。
サイズは点数ではなく、比較表の最大の数値が自動的に正しい選択ではない。ポリシーが許し、すべての相手が受け入れる最小値を選び、改善したと仮定せずにハンドシェイクを測定する。それでもタイムアウトする小さなグループは、サイズが話のすべてではなかったことを教えてくれる。
速いケース:ライブラリが拒否するグループ
現代のOpenSSLビルドは最小の有限体グループを一律に拒否し、引き上げられたセキュリティレベルは下限をさらに押し上げる。数十年古いパラメーターファイルを同梱するルーターファームウェアが通常の発生源であり、症状はグループや鍵のサイズを名指しするメッセージとともに即座に失敗する接続だ。その失敗に断続性はなく、だからこそ見分けやすい。
検査を飛ばすために設定を編集するのではなく、ファイルを置き換える。現在のグループを生成して検証し、デーモンが実際に読む場所へ導入する。古いファイルは、クライアントが新しいファイルで正常に接続するまで残しておく:
openssl dhparam -out /etc/openvpn/ffdhe2048.pem 2048
openssl dhparam -in /etc/openvpn/ffdhe2048.pem -check -noout
ls -l /etc/openvpn/ffdhe2048.pem検査コマンドはファイルを検証し、通れば役立つ出力は何も出さない。一覧は、サービスが読み込むファイルを置き換えたこと、隣の古いコピーではないことを確認する。設定をそのパスに向け、デーモンを再起動し、以前失敗したクライアントが今ハンドシェイクを完了することを確認する。
サーバーがセキュリティレベルや証明書プロファイルも設定しているなら、グループが間違いだったと結論する前にそれらを読む。より厳格なクラスを要求するプロファイルは、既定なら受け入れた材料を拒否することがあり、その設定を外すほうが検査を全体で無効にするより狭い変更だ。
相手とハードウェアに合ったサイズを選ぶ
風変わりなものを生成する前に、遠端が何に耐えられるかを調べる。2048ビットのグループには古すぎる機器は交換すべき機器であり、サーバーを弱いグループに向けるのは互換性の不満を障害に変えるだけだ。持続する修正は古いパラメーターではなく新しいソフトウェアへ向かう。この分野の一時的な例外は、いつも恒久的な設定になる道を持つ。
サーバーのCPUが限界なら、ポリシーを下回るのではなくアルゴリズムを変える。X25519のような楕円曲線鍵交換は大きな有限体グループより桁違いに安く、広く支持されているので、性能の不満には小さなRSAモジュラスより良い答えになる。
何を選んでも、実際の接続一本で試し、最終的に繋がるかだけでなくハンドシェイクにどれだけ時間がかかるかを見る。十二秒で成功する接続は、十五秒で失敗する接続と同じ根本原因を持つ。
再構築で覆されないよう選択を記録する
パラメーターファイルは構成管理下に置き、サイズ、理由、日付をそばに書く。再構築されたサーバーが黙って独自の既定値を生成することは、半年後に同じ不具合が戻り、誰も元の判断を説明できない道だ。
同じ情報をエンドポイントとプロファイルのそばに記録し、レビューがファイルサイズから逆算しなくて済むようにする。次の接続が止まったとき、そのメモは五分の確認と新しい調査の差になる。次の技術者が速いケース向けの修正で遅いケースを解こうとするのも防ぐ。