画像やリンクが無効になっている可能性もあるのでご了承下さい。
つい二日前、CentOS を 7.3 から 7.4 に更新して再起動後、動作に問題がないか改めてチェックしていたら OpenVPN のサーバーこそ正常に起動してはいたがクライアントからの接続でエラーが発生して繋がらなくなってしまっていた。
エラーメッセージを追うとどうも証明書に起因したエラーであると見受けられる。
VERIFY ERROR: depth=0, error=CRL has expired: CN=hogehoge
この一行を見れば明らかなので、証明書周りに問題がないか全部チェックした。
すると証明書廃止リスト crl.pem の期限がちょうどこのタイミングで失効していたようだ。
openssl crl -in /etc/openvpn/easyrsa3/pki/crl.pem -text
Certificate Revocation List (CRL):
Version 2 (0x1)
Signature Algorithm: sha256WithRSAEncryption
Issuer: /CN=bp7.org
Last Update: Mar 17 19:51:21 2017 GMT
Next Update: Sep 13 19:51:21 2017 GMT
というかそもそも有効期限が 180 日しか無いので更新頻度が高くなってしまう。定期的に更新して OpenVPN を再起動してあげれば良い問題だが、個人運用なのでただ面倒という事もある。
更にはクライアントプロファイルではオプション扱いなのにわざわざ証明書廃止リストを入れ込んでしまっていたので、クライアント側まで同時期に更新してやらないといけないなんてのは手間でしか無い。
それならばと証明書廃止リスト crl.pem の有効期限を伸ばしてあげれば一発解決だろうと言う事で次の作業を行った。
証明書周りは OpenSSL のコマンドを直叩きではなくて楽の出来る EasyRSA3 を用いているのでそちらの設定を変更する事で行う。
以下パスは任意に読み替えて作業する。
cd /etc/openvpn/easyrsa3
cp vars.example vars
vi vars
として
# How many days until the next CRL publish date? Note that the CRL can still be
# parsed after this timeframe passes. It is only used for an expected next
# publication date.
#set_var EASYRSA_CRL_DAYS 180
この 180 と書かれている行をコメントアウトして 3650 に書き換えて 10 年有効と変更する。
set_var EASYRSA_CRL_DAYS 3650
編集が終わったら次のコマンドを実行して crl.pem を再作成して有効期限を確認でもしておく。
./easyrsa gen-crl
openssl crl -in /etc/openvpn/easyrsa3/pki/crl.pem -text | grep 'Next Update'
Next Update: Sep 13 12:11:22 2027 GMT
これで OpenVPN サーバー側がエラーを吐いた場合は解決済みとなるが、クライアントプロファイルにも crl.pem を記述している場合にはそちらも合わせて再発行した crl.pem の内容に更新しておく事。もっともクライアントプロファイルには crl.pem を記述しない方が良いようだ。
尚、この問題は OpenVPN 2.3 までは crl.pem の有効期限を見ていなかったようだが、その問題が 2.4 の仕様変更によりきっちりと見るようになったからだとか。
つまり OpenVPN 2.4 系で尚かつ crl.pem 作成から 180 日経過した時点でこの記事冒頭に書いたようなエラーが発生して接続出来なくなるという事だそうだ。
コメント