はじめに
OpenVPNでVPNサーバを構築されている環境の方は、easy-rsaで作成した自己証明のca証明書の期限が切れるころ(3650日:約10年)ではないでしょうか。
で、いろいろと記事を検索しても、この「ca証明書の期限の更新」の記事があまり見当たらなかったので(あっても、「結局再構築しました」みたいな記事が多い)、自身への覚書も含め記述しておきます。
前提条件
1.OpenVPNでVPNサーバを構築している環境(かつ当方の環境はWindowsサーバ)
2.自己証明のca証明書+サーバ証明書+クライアント証明書でのVPN構築をされている環境(いわゆるeasy-rsaのスクリプトやバッチファイルで生成されたca証明書を用いている場合)
証明書名は以下としてコマンドを記述しています。
ca証明書 ca.crt
ca鍵 ca.key
サーバ証明書 server.crt
サーバ鍵 server.key
※クライアント証明書の更新についても特に触れません。
実施事項
ca証明書
openssl x509 -in ca.crt -days 3650 -out \_temp\ca.crt -signkey ca.key
これだけです。
Opensslコマンドでca.crtを読み込んで、任意の日数(上記は10年にしていますが任意の値で大丈夫です)の期間を設定し、出力先フォルダは別の一時フォルダにして、同名のca証明書を生成します。
上記のca.crtを、元のca.crtと差し替えて、問題なく認証が成功することを確認してください。
(むろんopenssl verifyコマンド使って認証チェックも必要ですが、最終的にはクライアントがつながるかどうかなので)
サーバ証明書
easy-rsaのデフォルトのスクリプト(当方環境ではバッチファイル)を流用して作成します。
OpenVPNとeasy-rsaで構築された場合、たいていの場合はca証明書とサーバ証明書の期間が同じになっているかと思いますので、ca証明書だけでなくサーバ証明書についても更新する必要があります。
通常easy-rsaで構築している場合、
build-key-server.bat
というバッチファイルがeasy-rsaフォルダ内にあるはずなので、これを利用する。
ただしそのまま実行してしまうとkeyからの作り直しになってしまうので、期限だけ延長するため、バッチファイルを以下のように編集します。
@echo off
cd %HOME%
rem build a request for a cert that will be valid for ten years
openssl req -days 3650 -nodes -new -keyout %KEY_DIR%\%1.key -out %KEY_DIR%\%1.csr -config %KEY_CONFIG%
rem sign the cert request with our ca, creating a cert/key pair
openssl ca -days 3650 -out %KEY_DIR%\%1.crt -in %KEY_DIR%\%1.csr -extensions server -config %KEY_CONFIG%
rem delete any .old files created in this process, to avoid future file creation errors
del /q %KEY_DIR%\*.old
を
@echo off
cd %HOME%
openssl ca -days 3650 -out %KEY_DIR%\%1.crt -in %KEY_DIR%\%1.csr -extensions server -config %KEY_CONFIG%
rem delete any .old files created in this process, to avoid future file creation errors
del /q %KEY_DIR%\*.old
に変更して、ファイル名も「build-crt-server.bat」に変更して保存します。
何のことはない、前半のKeyとcsrファイル作成部分を削除して、既存のkeyとcsrを用いて証明書を発行しているだけです。
vars.batで環境変数等設定しているはずなので、実行してから上記「build-crt-server.bat」を実行すれば、サーバ証明書の期限も更新できます。
おわりに
今回は完全に覚書なので、そのうち環境設定、構築、サーバ証明書、クライアント証明書の発行からca証明書、サーバ証明書の期限更新、平時のクライアントの期限更新など運用も絡めた環境構築について書ければいいなと思ったり思わなかったり。
以上、