OpenVPNドキュメント

証明書の失効

「証明書の失効」とは、以前に署名された証明書を無効にして認証目的で使用できなくなる事を意味します。

以下のような場合に証明書を無効にさせる事があります。

  • 証明書に関連付けられた秘密鍵が漏洩したか或いは盗難された場合
  • 暗号化された秘密鍵のパスワードをユーザーが忘れた場合
  • VPNユーザーのアクセスを終了させたい場合

例として、「証明書と鍵の生成」セクションで生成したclient2証明書を取り消します。

シェルもしくはコマンドプロンプトを開き、鍵の生成時に使用したeasy-rsaディレクトリに移動します。

  • Linux/BSD/Unixの場合:
. ./vars
./revoke-full client2
  • Windowsの場合:
vars
revoke-full client2

以下のメッセージが表示されます。

Using configuration from /root/openvpn/20/openvpn/tmp/easy-rsa/openssl.cnf
DEBUG[load_index]: unique_subject = "yes"
Revoking Certificate 04.
Data Base Updated
Using configuration from /root/openvpn/20/openvpn/tmp/easy-rsa/openssl.cnf
DEBUG[load_index]: unique_subject = "yes"
client2.crt: /C=KG/ST=NA/O=OpenVPN-TEST/CN=client2/emailAddress=me@myhost.mydomain
error 23 at 0 depth lookup:certificate revoked

最後の行の"error 23"は失効した証明書の検証に失敗したことを示すメッセージで、問題ありません。

revoke-fullスクリプトは、 keysサブディレクトリにcrl.pemというCRL(証明書失効リスト)ファイルを生成します。
このファイルをOpenVPNサーバーがアクセスできるディレクトリにコピーし、サーバー設定ファイルでCRL検証を有効にする必要があります。

crl-verify crl.pem

これにより、接続している全てのクライアントがCRLによって検証され、一致した場合は接続が切断されます。


CRLに関する注意事項

  • OpenVPNでcrl-verifyオプションを使用すると、新しいクライアントが接続するたび、もしくは既存クライアントがSSL/TLS接続を再ネゴシエートするたびに(デフォルトでは1時間おき)CRLファイルが再読み込みされます。
    このため、OpenVPNサーバーデーモンの実行中にCRLファイルを更新し、新規クライアントに対して更新内容を即時反映させる事が可能です。
    接続済みのクライアントが証明書を失効させている場合は、シグナル(SIGUSR1またはSIGHUP)を経由してサーバーを再起動し、全てのクライアント接続を切断するか、または管理インターフェースにTELNET接続して、他のクライアントに影響を与える事なく失効したクライアントインスタンスオブジェクトを切断することが可能です。
  • crl-verifyディレクティブはOpenVPNサーバーとクライアントの両方で使用できますが、サーバー証明書が失効していない限り、CRLファイルをクライアントに配布する必要はありません。
    クライアントは他のクライアントの証明書が失効していることを知る必要はありません。
  • CRLファイルはシークレットではありません。
    OpenVPNデーモンがルート権限をdropされた後でも読み取ることができるように、誰でも読み取り可にする必要があります。
  • chrootディレクティブを使用している場合は、CRLファイルのコピーをchrootディレクトリに置くようにしてください。
    OpenVPNが読み取る他のファイルとは異なり、CRLファイルはchroot呼び出しの実行後に読み込まれます。
  • 証明書を失効させる理由のひとつとして、ユーザーが秘密鍵のパスワードを忘れてしまうことが挙げられます。
    元の証明書を失効させることで、ユーザーの元の共通名を使用して新しい証明書と鍵のペアを生成することができます。