easyrsa3で構築したOpenVPN2.3系を使っていて問題なかったところに、 2.4系にアップデートしたら突如使えなくなったときの話です。
/var/log/openvpn.logにこんなんが出ます。
TLS: Initial packet from [AF_INET]xxx.xxx.xxx.xxx:xxxxxx, sid=xxxxxxxx xxxxxxxx VERIFY ERROR: depth=0, error=CRL has expired: CN=xxxxxxxxxx OpenSSL: error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned TLS_ERROR: BIO read tls_read_plaintext error TLS Error: TLS object -> incoming plaintext read error TLS Error: TLS handshake failed Fatal TLS error (check_tls_errors_co), restarting
アップデートで設定は全く変えていないのに、 2.3ではOK、2.4ではNGになるのですが、原因は以下のようです。
1. easyrsa3で作成した crl.pem はデフォルトで有効期限が180日に設定されており、期限が切れていた。がopenvpnはcrl.pemの期限を見ていなかった。 2. OpenVPNの2.3から2.4に変わったときにcrl.pemを扱うライブラリが独自のものからopensslに変更された影響で期限を見るようになり、接続できなくなった
参考: https://bugzilla.redhat.com/show_bug.cgi?id=1451696
ということで処理が正常化したらエラーが出たということのようです。
crl.pem を作成するときに期限を3650日にして再生成すればOKです。
なお、crl.pemはユーザー無効化リストですので、こちらを再生成しても既存のユーザーに影響はありません。
cd /path/to/easyrsa3 cp -p vars.example vars vim vars --- set_var EASYRSA_CRL_DAYS 3650 --- ./easyrsa gen-crl
で crl.pem を再生成できます。 crl.pemの期限は以下のコマンドで見れます。
openssl crl -in crl.pem -text