OpenVPN 证书删除并连接服务器上没有证书文件的情况

OpenVPN 证书删除并连接服务器上没有证书文件的情况

我遇到了一个问题,我从服务器上删除了证书文件。 但拥有这些文件的客户端仍然可以连接。

  • 我发现我应该撤销该证书,这可以通过更改该证书中的行来完成

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

    以 R 而不是 V 作为第一个字符行。

  • 但是之前我已从文件中删除了该证书的行,因为再次尝试生成该证书只​​会产生 0 字节大小的文件。

  • 据我所知,从 中删除后它应该无法连接index.txt,但它确实连接了。

什么可能导致该问题?我怎样才能禁止该特定证书连接?

我希望能够创建具有相同名称、CN 和我为每个证书设置的其他变量的证书,因为被不允许的证书 - 新创建的证书应该具有连接能力。

编辑:

解决方案是撤消更改index.txt(将我希望撤销的证书中的 R 改回 V)并在 中生成 CRL easy-rsa,但缺少
CRL。index.txt 不能像我那样手动更改,因为它缺少撤销日期,并且不允许我生成缺少的 CRL。我发现,撤销应该在 之前完成/etc/openvpn/easy-rsa/revoke-full <cert name>,所有变量都与生成证书时一样,就我的情况而言。

答案1

它不起作用,因为工作流程错误:您不能直接从服务器上删除客户端证书。

基本的误解似乎在于,OpenVPN 和证书颁发机构确实有一个通信渠道,因此 OpenVPN 会自动知道您想要允许哪些证书,但事实并非如此。OpenVPN 和证书颁发机构是完全独立的实体(即使它们都驻留在同一个主机上),彼此之间没有任何通信。

CA 通过使用自己的私钥加密认证请求的哈希值来“签署”认证请求(基本上是与主机名等标识信息捆绑在一起的公钥)。OpenVPN 所做的是检查 a) 它是否可以使用 CA 的公钥(它有,通常驻留在某个 ca.crt 文件中)解密哈希值,并检查哈希值对于给定的证书是否正确。它不需要也不使用任何与 CA 的“实时”连接来完成所有这些操作。

因此,您不能通过从 CA 目录中删除证书来撤销证书。如果这些文件是您的唯一副本,则从服务器中删除它们会造成问题:然后,openssl ca将不再允许您撤销它。您也不应该更改文件,因为它只是可用证书状态的index.txt指示。openssl ca

你需要做的是:

  1. 运行openssl ca -revoke <certificate file>以撤销内部证书OpenSSL 证书颁发机构数据库(基本上在中添加撤销信息index.txt
  2. 使用创建证书吊销列表openssl ca -gencrl -out ca.crl
  3. 将此撤销列表复制到 OpenVPN 撤销列表文件(请参阅crl-verifyOpenVPN 配置文件中的指令)
  4. 请参阅 OpenVPN 在下一次证书检查时拒绝连接

如果您正在使用easy-rsashell 包装器脚本集OpenSSL 证书颁发机构,参见OpenVPN 证书撤销部分有关如何使用 easy-rsa 脚本实现上述操作的更详细文档。

基本流程如下easy-rsa

# enter into the easy-rsa directory
# note that this directory may be different in your distro
cd /etc/openvpn/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

crl.pem您将在目录中找到该文件$KEY_DIR,如./vars文件中所定义的。

相关内容