発行されたファイルから OpenVPN クライアントプロファイルを組み立てる方法
ovpn ファイルは設定であり、証明書ではありません。発行された CA、証明書、鍵から一つのクライアントプロファイルを組み立て、識別情報とディレクトリを固定します。
運用担当者は CA バンドル、クライアント証明書、その秘密鍵を渡しますが、これらが一つのプロファイルに結線されるまでクライアントは起動しません。プロファイルは設定です。これらのファイルを指し示すもので、ファイルを含みませんし、編集しても証明書にはなりません。この手順はすでに承認済みのノート PC から始まり、既知のディレクトリから起動できるプロファイルで終わります。CA を作成せず、新しい証明書を登録せず、サーバーにも触れません。
ここでの対象は Linux 向け OpenVPN 2.6 のコマンドラインクライアントで、UDP 上で TUN をルーティングし、証明書認証を使います。
クライアント側のファイルだけを集める
保護されたディレクトリで作業し、承認済みの CA 信頼材、発行されたクライアント証明書、それに対応する秘密鍵を集めます。この例では名前は ca.crt、laptop-a.crt、laptop-a.key です。ファイル名は単なるラベルであり、各ファイルの中身を何も語りません。
登録時に鍵を生成した場合、その鍵はマシンから出ていません。発行元から戻ってくる必要があるのは、署名済み証明書と公開チェーンだけです。証明書がサービス期待するクライアントロールを備えているか確認します。鍵がその証明書のもので、以前の試行の古い証明書のものでないことも確認します。不一致の組はかなり後になって TLS 障害を起こし、サーバーの問題のように見えます。
CA の秘密署名鍵、サーバーの秘密鍵、DH パラメータはこのパッケージに含めないでください。
ファイルを小さなプロファイルに結線する
以下のプロファイルは意図的に短くしています。各行は、エンドポイントを選ぶか、クライアントが受け入れる識別情報を制限するか、三つのファイルのいずれかを指すかのどれかです。
client
dev tun
proto udp
remote vpn.example.net 1194
nobind
remote-cert-tls server
verify-x509-name vpn-gateway name
ca ca.crt
cert laptop-a.crt
key laptop-a.key
remote 行はネットワークのエンドポイントを選びます。remote-cert-tls server は相手側がサーバーロールの証明書を提示することを求めます。verify-x509-name は期待する名前を固定し、ここでは vpn-gateway を、OpenVPN の既定の名前フィールドによるサーバー証明書の Common Name として指定します。この値は DNS ホスト名から推測されるものではないため、運用担当者が用意した識別方式を使ってください。
テスト用エンドポイントが別の証明書を示すという理由だけで、これらの検査を外さないでください。
この基本プロファイルは、別個のアカウントチャレンジも制御チャネル鍵もないことを前提としています。サービスが auth-user-pass、tls-auth、tls-crypt を必要とする場合は、渡された設定と素材をそのまま保持してください。自分で生成した制御チャネルの秘密はサーバーが持つものと一致しないからです。古い例から圧縮や暗号の行を輸入するのではなく、サービスの暗号ポリシーも保持してください。
作業ディレクトリを明示する
相対パスはプロセスの作業ディレクトリに従い、.ovpn ファイルの場所には従いません。
これは、プロファイルを新しいフォルダーへ移せば鍵も付いてくると思っている人を驚かせます。管理者が選んだディレクトリでは、下のコマンドはプロファイルとその参照を読む前に絶対パスへ移動します。
sudo openvpn --cd /etc/openvpn/client/laptop-a --config laptop-a.ovpn
デスクトップのインポートウィザードやシステムサービスが依存関係をまとめてくれる場合があります。また独自の規則を適用します。テストしたのとは別の作業ディレクトリを使うこともあります。起動方法が鍵、証明書、CA のパスをどう解決するか確認してください。.ovpn ファイルだけを移しても、別個の秘密鍵は移りません。
鍵は想定したユーザーまたはサービス識別だけが読める状態にしてください。
ファイル名ではなく受け渡しを検証する
最初の承認済み接続の前に、エンドポイント、証明書の識別情報、発行元、有効期間を確認します。次に、実際に使う作業ディレクトリからファイル参照が解決されることを確認します。接続後は、ルーティングポリシーが提供すべきアプリケーションと DNS の挙動を試験します。読めるファイルが三つあっても、サーバーの承認や使えるリソース経路を何も証明しません。
パスフレーズの入力を求められた場合、それは秘密鍵のものであり、VPN アカウントのものではありません。
最後に、パッケージを資格情報素材として棚卸しします。同じ証明書と鍵を二台目のノート PC に渡すと識別情報が複製され、ファイル名を変えても二回目の登録にはなりません。プロファイルを組み立てることと発行することの違いはそこにあります。