我为我们公司的一些内部服务创建了一个自签名的根证书颁发机构,我自己配置了它(主要通过 HTTPS 提供服务)。然后我为这些服务创建了证书,并使用此 CA 签名。
现在我想向根 CA 添加一个 x509 扩展(CRL 分发点),而不会使从此 CA 颁发的现有服务器证书无效。这可能吗?
我的直觉是“是”,因为据我所知,访问相应的私钥对于证书身份的“完全授权”是必要和充分的。也就是说,除非在生成证书时(可能)将某种随机数与公钥一起合并到证书中。
我对 SSL 证书管理还是很陌生,但我(认为我)了解标准信任链的基础知识。我也很熟悉其他 PKI 加密的基本使用:我管理 SSH 密钥并使用 GPG 进行签名和加密。我学的是计算机科学,虽然我只是一个自学的密码学涉猎者。
我从未为原始 IIRC 制作过 CSR(我认为它是 的直接输出openssl req -new -x509)。当然,我仍然拥有原始 CA 的私钥,并且使用它我能够将原始证书“反转”为证书签名请求:
openssl x509 -x509toreq -in MyCA.pem -out MyCA.csr -signkey private/MyCA.key
我希望这会有效地“提取”上面提到的随机数,并允许我重新创建证书,但这次使用一个crlDistributionPoints字段,因此所有使用原始 CA 签名的证书仍将针对此新 CA 进行验证,但例外客户端将从字段中指定的 HTTP URL 检索我的(当前为空的)CRL 文件。
所以我做了一个扩展配置文件ext.conf:
[ cert_ext ]
subjectKeyIdentifier=hash
crlDistributionPoints=URI:http://security.mycompany.co.za/root.crl
Run Code Online (Sandbox Code Playgroud)
我从 CSR 生成了新版本的根 CA:
openssl x509 -extfile ./ext.conf -extensions cert_ext -req -signkey private/MyCA.key -in …Run Code Online (Sandbox Code Playgroud)