Windows 版 OpenVPN をクライアントにする時、ローカルで鍵ペアを生成して CSR だけ送る

(2022/12/19 追記)OpenVPN の新しいバージョンにも easy-rsa は同梱されているが、 MSI インストーラー版でデフォルトではなくなっているのと、どちらにせよこの手順では通らない模様。今なら WSL が選択肢に挙がるので、 WSL から openssl コマンドで鍵だけ発行したほうが楽だと考えられる。 OpenSSL での証明書発行手順メモのページで説明したもののうち自己署名を省いた手段とることができる。

OpenVPN でサーバを構築する方法は2x HOW TO | OpenVPNなどのページに掲載されていたりするが、 Windows 版で新規クライアントに対して easy-rsa を用いつつ秘密鍵を端末から出さないで証明書を得る方法について。何分目新しいものはないが、こういうのは既にサーバが立っていると手順通り以外したくなくなる病になりがち(特に easy-rsa で微妙にラップされているので余計になりがち)なのでメモ。基本的にはEasy_Windows_Guide – OpenVPN Communityの簡略版。

クライアント側

  • Community Downloads | OpenVPNよりクライアントをダウンロード
  • インストール。この時、インストールするもの一覧で、 EasyRSA をインストールするオプションのチェックボックスを忘れずにつける。
  • cmd.exe を管理者権限で開く

init-config は vars をリセットするのでインストール時のみ実行。notepad では “set KEY_” で始まる行の環境変数を適宜設定。client-name は(ca の中で)一意なものを設定。

> cd "C:\Program Files\OpenVPN\easy-rsa"
> init-config
> notepad vars.bat
> vars
> clean-all
> build-key client-name

client-name.key と client-name.csr ができるので、 csr は VPN 設計的には秘密にする必要はないので OpenVPN サーバを管理できる端末に送る。key はクライアント端末から出さない。

サーバ側

# cd easy-rsa # ここを読んでいる時点でeasy-rsa のディレクトリが既にあるはずなので移動
# vim ./keys/client-name.csr # コピー方法はなんでもよいが、ここに csr を配置
# . ./vars
# ./sign-req client-name

これで、 ./keys/client-name.crt に証明書が発行される。これも秘密にする必要はないのでクライアント端末にコピーする。