OpenVPNの証明書廃止リスト(CRL)の有効期限切れによる接続失敗と対処法

2024年2月12日

はじめに

ある日、OpenVPNで接続しようとしたところ、クライアント側でTLS接続に失敗し、サーバ側を確認してみると、証明書の検証に失敗した旨のログが出ておりました。

証明書廃止リスト(crl.pem)の有効期限が切れており接続ができない状態となっていました。

証明書廃止リストのデフォルト有効期限は180日なので、3650日(10年)有効な設定へ変更します。

本来であれば証明書失効リストの再作成することで対応可能ですが、筆者自身が認証局(CA)証明書の発行をおこなう際に設定したパスワードを忘れてしまっていたため、証明書類一式の再作成となりますのでご注意ください。

また、簡単に認証局が作成できるEasyRSAツールを利用している環境に適用できますので予めご了承ください。

証明書廃止リスト有効期限確認

openssl crl -in /etc/openvpn/crl.pem --text

        Last Update: May  3 03:23:47 2023 GMT
        Next Update: Oct 30 03:23:47 2023 GMT

上記、有効期限が丁度180日となっていることが確認できます。

クライアント側ログ

クライアント側では以下のようにTLS接続に失敗していることが確認できます。

※Windows環境でOpenVPN接続を継続ししばらく待つと出力される状態でした。

Sat Nov  4 19:08:33 2023 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Sat Nov  4 19:08:33 2023 TLS Error: TLS handshake failed

サーバ側ログ

サーバ側では、以下のように証明書の検証に失敗していることが確認できました。

Wed Nov  1 09:40:02 2023 ***.***.***.***:***** VERIFY ERROR: depth=0, error=CRL has expired: CN=***, serial=***
Wed Nov  1 09:40:02 2023 ***.***.***.***:***** OpenSSL: error:1417C086:SSL routines:tls_process_client_certificate:certificate verify failed

証明書廃止リスト有効期限の変更

EasyRSAツールに付属している、Easy-RSA設定の組み込み例が記載されている「vars.example」ファイル中にある「EASYRSA_CRL_DAYS」設定を変更します。

筆者環境ではEasyRSAツールを「/etc/openvpn/easyRsa」に置いていますのでこちらに「vars.example」を「vars」という名前でコピーします。

筆者環境のOpenVPNは以前投稿した 記事 を参考にしていただければと思います。

設定ファイルのコピーおよびバックアップ

設定ファイルをコピーし、念のため、バックアップしておきます。

cp -p /usr/share/doc/easy-rsa/vars.example /etc/openvpn/easyRsa/vars
cp -p /etc/openvpn/easyRsa/vars /etc/openvpn/easyRsa/vars.org
cp -p /etc/openvpn/easyRsa/vars /etc/openvpn/easyRsa/vars_$(date +%Y%m%d)

有効期限変更

先ほどコピーした vars ファイルの設定変更をおこないます。

EASYRSA_CRL_DAYS という項目があるのでこちらを「180」→「3650」に変更します。

子細変更内容については以下に記載していますのでご参考にして下さい。

vi /etc/openvpn/easyRsa/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  ←変更前

 ↓ ↓ 以下へ変更 ↓ ↓

# 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        3650 ←変更後

変更差分

diff -u /etc/openvpn/easyRsa/vars.org /etc/openvpn/easyRsa/vars

--- /etc/openvpn/easyRsa/vars.org       2020-09-10 05:59:45.000000000 +0900
+++ /etc/openvpn/easyRsa/vars   2023-11-04 20:05:29.671811246 +0900
@@ -131,7 +131,7 @@
 # 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
+set_var EASYRSA_CRL_DAYS       3650

 # How many days before its expiration date a certificate is allowed to be
 # renewed?

※念のため、証明書認証局の有効期限設定が 「set_var EASYRSA_CERT_EXPIRE 3650」 になっていることを確認します。

※なっていない場合、変更しておいてください。

各種証明書の再発行

再発行処理は冒頭でも記載した過去記事と同じ内容になりますので割愛させていただきます。

変更後証明書廃止リスト有効期限確認

各種証明書再発行後、以下のように有効期限が10年になっていれば問題ありません。

各種証明書再発行後は、接続ファイル ovpn に記載している証明書類を再発行後の証明書へ差し替えル必要がありますので注意してください。

openssl crl -in /etc/openvpn/crl.pem --text

        Last Update: Nov  4 11:39:14 2023 GMT
        Next Update: Nov  1 11:39:14 2033 GMT

おわりに

OpenVPN もひとえに奥深いものだなぁ~と思った次第です。

よい勉強になりました。