web-dev-qa-db-ja.com

OpenVPN証明書の削除とサーバー上の証明書ファイルなしでの接続

サーバーから証明書ファイルを削除するという問題が発生しました。

ただし、これらのファイルを持つクライアントは引き続き接続できます。

私は、証明書を取り消す必要があること、およびこれをその証明書の行を変更することで実行できることがわかりました

/etc/openvpn/easy-rsa/keys/index.txt

最初の文字行として、VではなくRを使用します。

しかし、以前はファイルからその証明書の行を削除しました。これは、その証明書を再度生成しようとすると、サイズが0バイトのファイルになったためです。

私が読んだように、index.txtから削除した後は接続できないはずですが、接続します。

問題の原因は何ですか?特定の証明書の接続をどのようにして拒否できますか?

許可されていない証明書として、各証明書に設定した同じ名前、CN、およびその他の変数で証明書を作成できるようにしたい-新しく作成された証明書には接続する機能が必要です。

編集:

解決策は、index.txtでの変更を取り消し(失効させたい証明書でRをVに戻す)、easy-rsaでCRLを生成することでしたが、これがありませんでした。
index.txtは取り消し日がなく、欠落しているCRLを生成できなかったため、手動で変更しないでください。私の場合、証明書が生成されたときと同じように、すべての変数を使用して/etc/openvpn/easy-rsa/revoke-full <cert name>によって失効する必要があることがわかりました。

5
tymik

単純な答えは間違っているため機能しません

あなたの基本的な誤解は、OpenVPNと認証局が通信チャネルを持っているため、OpenVPNが許可する証明書を自動的に認識するという考えにあるようです。 これはそうではありません。 OpenVPNと認証局は完全に別個のエンティティーであり(両方が同じホスト上にある場合でも)、相互に通信することはありません。

CAは、認証要求のハッシュを独自の秘密鍵で暗号化することにより、認証要求(基本的にはホスト名などの識別情報がバンドルされた公開鍵)に「署名」します。 OpenVPNが行うことは、a)CAの公開鍵(通常、ca.crtファイルにある)を使用してハッシュを復号化できるかどうかを確認し、ハッシュが指定された証明書に対して正しいかどうかを確認することです。このため、CAへの「ライブ」接続は必要なく、使用もしません。

証明書をCAのディレクトリから削除して取り消すことはできません(クライアント証明書を削除していて、それが唯一のコピーだった場合、openssl caを使用して取り消すことはできません)、またはindex.txt(このファイルは、利用可能な証明書の状態についてのopenssl caの指標にすぎません)。代わりにあなたがする必要があるのは

  1. openssl ca -revoke <certificate file>を実行して、内部OpenSSL CAデータベースの証明書を取り消します(基本的にindex.txtに取り消し情報を追加します)
  2. openssl ca -gencrl -out ca.crlを使用して証明書失効リストを作成する
  3. この失効リストをOpenVPN失効リストファイルにコピーします(OpenVPN構成ファイルのcrl-verifyディレクティブを参照)
  4. openVPNが次の証明書チェックで接続を拒否するを参照してください

OpenSSL CAに設定されたeasy-rsaシェルラッパースクリプトを使用している場合は、 証明書の失効に関するOpenVPNセクション で詳細なドキュメントを参照してください。 easy-rsaスクリプトを使用して上記を実現する方法。基本的な手順は

# cd into the easy-rsa directory
cd <somewhere>/easy-rsa
# load your CA-related variables into the Shell environment from the ./vars file
. ./vars
# run the revoke script for <clientcert.pem>
./revoke-full clientcert

$KEY_DIRファイルで定義されているように、crl.pemは./varsディレクトリにあります。

8
the-wabbit