Can't connect to OpenVPN Server - Recreate CRL

OpenVPN環境構築

OpenVPNに接続できないという問題が発生。解決したので手順を示します。

はじめに

暫く前にOpenVPNサーバに接続できなくなる問題が発生しました。
解決したので備忘録兼ねて手順を公開します。

環境

環境は以下

OS CentOS 6.9
OpenVPN openvpn-2.4.1-3

基本 OpenVPN クライアント設定、及び、OpenVPN クライアント設定 に書いた手順で構築した環境になります。

事象

OpenVPN のログは以下のようになっていました。 ( 一部マスクしています )
ポイントは、
error=CRL has expired
と予想。

Thu Apr 27 14:00:00 2017 XX.XX.XX.XX:XXXXX TLS: Initial packet from [AF_INET]XX.XX.XX.XX:XXXXX, sid=xxxxxxxx xxxxxxxx
Thu Apr 27 14:00:00 2017 XX.XX.XX.XX:XXXXX VERIFY ERROR: depth=0, error=CRL has expired: C=JP, ST=Tokyo, L=Bunkyo-ku, O=example.co.jp, CN=xxxx, name=EasyRSA, emailAddress=xxxx@example.co.jp
Thu Apr 27 14:00:00 2017 XX.XX.XX.XX:XXXXX OpenSSL: error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned
Thu Apr 27 14:00:00 2017 XX.XX.XX.XX:XXXXX TLS_ERROR: BIO read tls_read_plaintext error
Thu Apr 27 14:00:00 2017 XX.XX.XX.XX:XXXXX TLS Error: TLS object -> incoming plaintext read error
Thu Apr 27 14:00:00 2017 XX.XX.XX.XX:XXXXX TLS Error: TLS handshake failed
Thu Apr 27 14:00:00 2017 XX.XX.XX.XX:XXXXX SIGUSR1[soft,tls-error] received, client-instance restarting

OpenVPN環境は easy-rsa2を利用して構築したのですが、期限設定は vars ファイルで以下のように設定されています。

# In how many days should the root CA key expire?
export CA_EXPIRE=3650

# In how many days should certificates expire?
export KEY_EXPIRE=3650

が、念のために以下で確認。

# openssl x509 -noout -dates -in ca.crt
notBefore=Jul 19 12:00:00 2013 GMT
notBefore=Jul 17 12:00:00 2023 GMT

3650日で作成されてました。
( 期限切れした訳ではなかった )

解決策

easy-rsa を再実行する手もありますが、ユーザーの設定も再作成する必要が出てくるため、crl.pem のみを再作成する方法を実施してみました。

※実施前にはOpenVPNの設定をバックアップしておきましょう。

OpenVPNのサポートフォーラム に似たような事象が載っていたのでこれを参考にしました。

openssl 設定の編集

# vi /etc/pki/tls/openssl.cnf

以下を編集 (抜粋)。デフォルトの期間を変更しています。

#default_days   = 365                   # how long to certify for
default_days    = 3650                  # how long to certify for
#default_crl_days= 30                   # how long before next CRL
default_crl_days= 3650                  # how long before next CRL

上記設定を変更したくない場合、この設定ファイルを適当なディレクトリにコピーしてから編集し、後述の "openssl ca ..." コマンドで設定ファイルを渡す形 ( -config openssl.cnfのパス ) でコマンド実行すればOKです。

crl.pem の再作成

# cd /etc/openvpn/easy-rsa/
# openssl ca -gencrl -keyfile keys/ca.key -cert keys/ca.crt -out keys/crl.pem

こちらの環境では、いくつかのファイルにアクセスできない旨エラーが発生したので、以下対策を実施しました。

/etc/pki/CA/index.txt

# touch /etc/pki/CA/index.txt

/etc/pki/CA/serial

# echo '1000' > /etc/pki/CA/serial

/etc/pki/CA/crlnumber

# echo '00' > /etc/pki/CA/crlnumber

必要なファイルを作成した後、再実行します。

# openssl ca  -gencrl -keyfile keys/ca.key -cert keys/ca.crt  -out keys/crl.pem
Using configuration from /etc/pki/tls/openssl.cnf

crl.pem のコピー

作成した crl.pem を /etc/openvpn ディレクトリに ( 上書き ) コピーします。

# cp keys/crl.pem /etc/openvpn/

OpenVPN の再起動

# /etc/rc.d/init.d/openvpn restart

確認

サービス再起動後、クライアントから接続して問題なく接続できるようになればOKです。

こちらの環境ではユーザー設定等は変更せずに接続可能となりました。

まとめ

上記 OpenVPNのサポートフォーラムでは OpenVPN を 2.3 から 2.4 にアップグレードした後に問題が発生したとの事。

2017/3/22 に2.4.1 がリリース ( 弊社環境では 今月になってから yum でアップデート ) されたのですが、今回の問題はこれがトリガになったのかもしれません。