DHファイルかtls-authキーか——2つのOpenVPNファイルを見分ける
一方は公開されたグループパラメーター、もう一方は共有の秘密素材です。3つの条件が、どちらがどのディレクティブに属するかを決めます。
二つのファイル、二つのディレクティブ、そしてどちらも設定対象の名前で呼んでしまう習慣。こうしてdh.pemがtls-authの行に紛れ込み、クライアントは予期しない鍵形式だというメッセージで失敗します。目の前の判断は、どちらのファイルが強いかではありません。その配備に本当に必要な役割はどちらかであり、三つの条件がそれを決めます。TLSスタックがどの鍵交換を交渉するか、制御チャネルの認証をそもそも欲しいか、素材を秘密に保つ必要があるか、です。
この順に答えれば、ファイルの問いも自然に解けます。飛ばすとディレクティブ名が互いに置き換え可能に見え始め、それがまさにこの間違いを生む状態です。
ファイル名より先にラベルを読む
ファイルの一行目は名前より多くを語ります。名前は人間の慣習であり、ラベルはツールが生成するものだからです。Diffie-HellmanパラメーターはBEGIN DH PARAMETERSというPEMラベルを持ちます。OpenVPNの静的鍵はまったく別の構造で、独自のヘッダーと十六進のペイロードを持ちます。
名前を変えても何も変換されません。ta.keyという名前のパラメーターファイルは依然としてパラメーターであり、dh.pemという名前の静的鍵は依然として静的鍵です。パーサーは中身を読み、不一致を拒否します。プロファイルを編集する前に確認してください。
head -n 1 dh.pem
head -n 1 ta.key必要なファイルを決める三つの条件
一つ目の条件は鍵交換です。有限体のDiffie-Hellmanハンドシェイクには群が必要で、dhディレクティブはサーバーがそのパラメーターを指定する場所です。楕円曲線のハンドシェイクにはそのファイルはまったく不要です。曲線自体がパラメーター集合だからです。サーバーがECDHEスイートだけを交渉するなら、DHファイルは追加の強度ではなく死荷重です。
二つ目の条件は制御チャネルの認証で、独自の素材を持つ別機能です。tls-authファイルは両側が持つ共有の静的鍵で、制御チャネルのパケットに署名するために使われ、認証されていない相手がハンドシェイクを完了することさえできません。有限体DHを使うかどうかに関係なく存在し、群のパラメーターとは無関係です。
三つ目の条件は秘密性と配布です。DHパラメーターはセッションを弱めずに公開できます。秘密の値はハンドシェイクごとに生成され、両者から外へ出ないからです。静的鍵は公開してはいけません。両端で同じバイト列であり、自力で更新されず、持っている誰もが有効な制御チャネル署名を作れます。この二つの答えはまったく異なる扱いの規則を指しており、だから一方のファイルはリポジトリに置け、もう一方は置けません。
役割ごとに正しい素材を生成する
ディレクティブが期待する形式を生成するツールを使い、両者の間で変換しないでください。OpenVPN 2.6の共有鍵では、ジェネレーターの型付き形式が用途を明示します。
openvpn --genkey tls-auth ta.keyこのコマンドは新しい秘密素材を作ります。既存の鍵を修復も検査もしませんし、再実行すると他のピアが持たない別の鍵になります。生成されたファイルは、あらゆる共有秘密に使うような経路で必要なピアへコピーし、方向の取り決めを一貫させてください。tls-authでは、一方がkey-direction 0、もう一方がkey-direction 1を使います。
DHパラメーターは、必要なときには鍵生成器ではなくパラメーター生成から得られ、出力が公開であっても出どころが重要です。未知の出どころから取った群は、公開されているからといって信頼できるようにはなりません。ピアが合意できる群であり、大きさや作りによって弱められていない群である必要があります。
dh noneが意味すること、しないこと
dh noneは狭い意味を持つ実際のディレクティブです。ハンドシェイクが楕円曲線Diffie-Hellmanを使うため、有限体のパラメーターファイルは読み込まれません。何かを弱めるという意味で「DHの手順を飛ばす」略記ではなく、ましてOpenVPNに別のファイルを代用として受け入れさせるものでもありません。
読み違えると二つの誤りが生じます。一つ目は、dh noneがtls-authの必要性をなくすと考えることです。両者は別のものを制御しています。二つ目は、曲線だけの設定の隣に古いdh行を残し、サーバーが実際にどのファイルを使っているのかと悩むことです。ディレクティブがあればファイルは読まれ、そこでの壊れたパスは、これから交渉される鍵交換とは無関係な理由で起動を失敗させます。
間違ったファイルがすでに配備されている場合
プロファイルの所有者から本来の秘密を復元し、その間は証明書の検証に手を触れないでください。失敗は形式の不一致であり、信頼の失敗ではありません。エラーを避けるために検証を切ると、起動時の問題が静かな問題に置き換わります。
次に、人が混同しがちな二つの出来事を分けてください。DHパラメーターファイルの公開はほとんど無害です。パラメーターは設計上公開だからです。tls-auth鍵の露出は別の出来事です。鍵はそれを持つすべてのピアに対して制御チャネルのパケットを認証するため、交換は展開全体で調整する必要があり、一台のホストに適用するものではありません。
五分の確認で、どちらの場合かが分かります。各ファイルの一行目を読み、それを参照するディレクティブを確認し、ファイルの配布が素材の要求と合っているかを確認してください。これは動くPKIを作り直すより小さな作業であり、三つの条件がずっと指していたのはこれです。