OpenVPNの証明書廃止リスト(CRL)の有効期限切れによる接続失敗と対処法
Contents
はじめに
ある日、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」 になっていることを確認します。
※なっていない場合、変更しておいてください。
各種証明書の再発行
再発行処理は冒頭でも記載した過去記事と同じ内容になりますので割愛させていただきます。
- https://www.sharemyknowledge.jp/centos7/openvpn-centos7#31-ca
- 上記過去記事内「3.1 認証局 ( CA ) の作成」から進めていただければ、先ほど変更した設定を読み込んで生成してくれます。
変更後証明書廃止リスト有効期限確認
各種証明書再発行後、以下のように有効期限が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 もひとえに奥深いものだなぁ~と思った次第です。
よい勉強になりました。
ディスカッション
コメント一覧
まだ、コメントがありません