如何在没有证书时撤销openssl证书

时间:2012-02-29 09:40:55

标签: openssl certificate-revocation

我制作了一份由本地计算机上创建的CA签名的openssl证书。

此证书已删除,我暂不再使用。

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

failed to update database
TXT_DB error number 2

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

3 个答案:

答案 0 :(得分:66)

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

openssl ca -revoke /etc/ssl/newcerts/1013.pem #replacing the serial number

只有在偏离-keyfile设置的情况下,才需要在Nilesh的回答中提及-certopenssl.cnf


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

unique_subject = no

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

答案 1 :(得分:7)

我没试过,但看起来你需要这样的东西。

  
    

openssl ca -revoke bad_crt_file -keyfile ca_key -cert ca_crt

  

openssl会自动将您的证书副本保存在newcerts目录中。您可能需要检查它以检索您的证书。不幸的是,你需要一张证书来撤销它。有关详细信息,请参阅以下内容:http://www.mad-hacking.net/documentation/linux/security/ssl-tls/revoking-certificate.xml

答案 2 :(得分:1)

就像其他答案一样,openssl CA通常将签名证书的副本保存在子目录(newcertscertskeys中,带有easyrsa。查找new_certs_dir您的权限的openssl.cnf文件中的定义或脚本中的-outdir选项)。

因此,规范的做法是:

openssl ca -config openssl.cnf -revoke newcerts/hello-world.pem

但是,我添加此答案以注意,在当前版本中,openssl ca -revoke ...似乎只会更新index.txt文件(尽管如此,它仍会询问私钥密码,但会询问{{3 }}),因此,如果您确实没有任何证书备份,但是仍然有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将是撤销证书的实际步骤,并使用授权机构的私钥生成签名列表。