我制作了一份由本地计算机上创建的CA签名的openssl证书。
此证书已删除,我暂不再使用。
使用相同的commonName创建另一个证书是不可能的,因为openssl不允许它并且会生成错误:
failed to update database
TXT_DB error number 2
如何撤销证书以创建具有相同commonName的另一个证书?
答案 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的回答中提及-cert
和openssl.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通常将签名证书的副本保存在子目录(newcerts
或certs
或keys
中,带有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
将是撤销证书的实际步骤,并使用授权机构的私钥生成签名列表。