les*_*usz 52 openssl certificate-revocation
我制作了一个由本地机器上创建的CA签名的openssl证书.
此证书已删除,我不再拥有它.
创建具有相同commonName的另一个证书是不可能的,因为openssl不允许它并将生成错误:
failed to update database
TXT_DB error number 2
Run Code Online (Sandbox Code Playgroud)
如何撤销证书以创建具有相同commonName的另一个证书?
Tob*_*ler 72
(基于Nilesh的回答)在默认配置中,openssl将保留所有已签名证书的副本/etc/ssl/newcerts,并以其索引号命名.所以grep /etc/ssl/index.txt获取要撤销的密钥的序列号,例如1013,然后执行以下命令:
openssl ca -revoke /etc/ssl/newcerts/1013.pem #replacing the serial number
Run Code Online (Sandbox Code Playgroud)
该-keyfile和-cert如果从你会偏离Nilesh制作的答复中提到,才需要openssl.cnf设置.
或者,您也可以更改/etc/ssl/index.txt.attr为包含该行
unique_subject = no
Run Code Online (Sandbox Code Playgroud)
允许具有相同公用名的多个证书.如果您已发布原始证书,则撤销旧证书是更好的解决方案,即使您未运行OSCP服务器或提供CRL也是如此.
我没试过,但看起来你需要这样的东西.
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
就像其他答案所说,openssl CA 通常在子目录中保留签名证书的副本(newcerts或certs,或keys使用 easyrsa。在 openssl.cnf 文件中查找new_certs_dir脚本中您的权限或-outdir选项的定义)。
因此,规范的做法是:
openssl ca -config openssl.cnf -revoke newcerts/hello-world.pem
Run Code Online (Sandbox Code Playgroud)
但是,我添加这个答案是为了注意,在当前版本中,openssl ca -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
Run Code Online (Sandbox Code Playgroud)
(使用 OpenSSL 1.1.1c 进行测试。在某些其他版本/环境中,序列号可能会短得多)
这openssl ca -config openssl.cnf -gencrl -crldays 30 -out crl.pem将是撤销证书的实际步骤,使用颁发机构的私钥生成签名列表。