Openssl 如何在不使用';我没有证书

Openssl 如何在不使用';我没有证书,openssl,certificate-revocation,Openssl,Certificate Revocation,我制作了一个由本地机器上创建的CA签名的openssl证书 此证书已被删除,我不再拥有它 无法使用相同的commonName创建另一个证书,因为openssl不允许它,并且将生成错误: failed to update database TXT_DB error number 2 如何撤销证书以创建另一个具有相同commonName的证书?我没有尝试过此方法,但您似乎需要类似的方法 openssl ca -revoke bad_crt_file -keyfile ca_key -cert ca

我制作了一个由本地机器上创建的CA签名的openssl证书

此证书已被删除,我不再拥有它

无法使用相同的commonName创建另一个证书,因为openssl不允许它,并且将生成错误:

failed to update database
TXT_DB error number 2

如何撤销证书以创建另一个具有相同commonName的证书?

我没有尝试过此方法,但您似乎需要类似的方法

openssl ca -revoke bad_crt_file -keyfile ca_key -cert ca_crt
openssl会自动将您的证书副本保存在newcerts目录中。您可能需要检查它以检索您的证书。很遗憾,您需要一个证书来撤销它。有关详细信息,请参见以下内容:

(基于)在默认配置中,openssl将在
/etc/ssl/newcerts
中保留所有已签名证书的副本,以其索引号命名。因此grep
/etc/ssl/index.txt
获取要撤销的密钥的序列号,例如1013,然后执行以下命令:

openssl ca -revoke /etc/ssl/newcerts/1013.pem #replacing the serial number
Nilesh回答中提到的
-keyfile
-cert
仅在与您的
openssl.cnf
设置不一致时才需要


或者,您也可以更改
/etc/ssl/index.txt.attr
以包含该行

unique_subject = no

允许多个具有相同公用名称的证书。如果您已经发布了原始证书,那么撤销旧证书是更好的解决方案,即使您没有运行OSCP服务器或提供CRL。

就像其他答案所说的那样,openssl CA通常在子目录中保留签名证书的副本(
newcerts
certs
或使用easyrsa的
密钥
。在您机构的openssl.cnf文件中查找
new\u certs\u dir
定义,或在脚本中查找
-outdir
选项)

因此,规范的做法是:

openssl ca -config openssl.cnf -revoke newcerts/hello-world.pem
但是,我添加这个答案是为了说明,在当前版本中,
opensslca-revoke…
似乎只更新
index.txt
文件(它仍然会要求私钥密码,这是有疑问的)因此,如果您确实没有任何证书备份,但仍然有
index.txt
或某种检索序列号的方法,您可以查找/整理证书行并更改它:

# before
V   291008172120Z       6DB67443D7E6C2D95D6E2F7F264C05F944964049    unknown /C=FR/CN=coucou.com
# after
R   291008172120Z   191011172218Z   6DB67443D7E6C2D95D6E2F7F264C05F944964049    unknown /C=FR/CN=coucou.com

# Format is 6 fields, tab-separated, and filename is usually 'unknown' :
# CRL doesn't contain nor need the subject so if unavailable, just make up something close
V/R/E   expiration-date revocation-date serial-number   filename    subject
(使用OpenSSL 1.1.1c进行测试。在其他版本/环境中,序列号可以短得多)


openssl ca-config openssl.cnf-gencrl-crldays 30-out crl.pem
将是撤销证书的实际步骤,使用授权机构的私钥生成签名列表。

更多详细信息(假设默认配置):Grep
/etc/ssl/index.txt
获取要撤销的密钥的序列号,例如1013,然后只需
openssl ca-revoke/etc/ssl/newcerts/1013.pem
(替换序列号)只有当
-keyfile
-cert
与您的
openssl.cnf
settings@TobiasKienzler这就解决了我的问题。也许这应该是一个完整的答案。@MichaelHampton很高兴听到,我的答案很好!非常感谢!对于easy rsa用户,答案是:/etc/openvpn/easy rsa/revoke full/etc/openvpn/easy rsa/01.pem和所有已签名证书及其索引的列表可以在/etc/openvpn/easy rsa/keys/index中找到。txt@Thassilo很高兴知道,也要感谢你(还有稍微晚了一点的欢迎来到SO:)这正是我所需要的。如果有人在使用OpenVPN的工具(像我一样)搞砸了他们的撤销时来这里寻求帮助,然后您可以复制“revoke full”脚本并对其进行更改。您仍然希望维护CRL(证书吊销列表),因此编辑复制的“revoke full”,并将
$OPENSSL ca-revoke“$1.crt”-config“$KEY\u config”
的行更改为:
$OPENSSL ca-revoke/etc/openvpn/easy rsa/keys/your-PEM.PEM-config“$KEY\u CONFIG”