我很困惑,我在 Debian 上有一个 OpenVPN 服务器。负责此服务器的前系统管理员使用命令“rm -f example.crt”删除了用户证书(.crt 文件)。(这是一个好主意……)
我们现在陷入困境,因为删除 crt 文件不会阻止访问,证书仍然有效,我在 index.txt 文件中看到它,并且我无法使用“sudo ./easyrsa revoke please_delete_me”撤销它们,因为 crt 文件不再存在。
我有这个:
Cannot be revoked because no certificate was found. A certificate was expected
at: /home/admin/easy-rsa/pki/issued/please_delete_me.crt
以下是 index.txt 文件的示例
V XXXXXXXXXX AAAAAABBBBBBBBCCCCCCC unknown /CN=please_delete_me
V ZZZZZZZZZZZ DDDDDDDDDEEEEEEEFFFFFFF unknown /CN=another_example_1
这里有人知道如何重新生成 crt 文件或在没有该死的文件的情况下清理未使用的证书吗?
答案1
让我解释一下为什么 EasyRSA 需要证书文件:它需要一个证书序列号标识要撤销哪个证书。CN 不是唯一的,但序列号是唯一的。
如果你看到index.txt
文件,请查看它:它只是一个易于理解的文本文件结构。这是一个以制表符分隔的表格,每行一个证书。
V<tab>yymmddHHMMSSZ<tab><tab>serial<tab>DN
R<tab>yymmddHHMMSSZ<tab>yymmddHHMMSSZ<tab>serial<tab>DN
...
第一个字段是有效性,V
表示有效或R
撤销。然后是两个带有时间戳的字段:第一个字段始终是填充的,表示到期,第二个为空,表示有效证书,仅填写撤销 - 这是撤销的时刻。(请注意,有两个连续的有效证书标签,“字段”位于它们之间。)年份为两位数(不带世纪),时间戳为 UTC(Z 表示祖鲁)。“撤销”操作所做的只是更改为“R”并添加撤销日期,然后它会签署新版本的 CRL。
因此,您可以在该文件中找到包含您的证书的行并手动进行这些更改。然后重新生成 CRL:
openssl ca -gencrl -out ca.crl -config openssl.cnf
您还可以通过这种方式将证书从撤销状态恢复到有效状态。
此外,<commonName>.crt
EasyRSA 通常还会以 形式存储一组文件<serialNumber>.pem
(至少 EasyRSA v2 也是如此)。这些是相同的证书。您也可以使用这些证书来撤销证书 — 只需将 pem 文件复制到 name.crt 中并撤销名称即可。请参阅index.txt
以关联 CN 和序列号。您还可以通过执行 查看解码后的证书openssl x509 -in <file> -noout -text
。
请注意,从安全角度来看,您需要重新生成 CA和重新创建所有证书。这是因为旧管理员有权访问您的 CA 的私钥;这意味着,他可能仍然拥有 CA,因此能够在您不知情的情况下颁发有效证书。除非您这样做,否则您的 VPN 会受到威胁!