使用 OpenSSL 创建没有私钥的证书

信息安全 证书 openssl 智能卡
2021-09-04 07:14:09

我知道 OpenSSL 要求签署 CSR 是有原因的:为了确保 CSR 的有效性,它是由附加公钥的实际私钥所有者请求的。这绝对没问题,但理论上 CA 可以通过其他方式确保有效性,尤其是当 CSR 从未在传输中时。自签名证书就是这种情况,例如本地颁发和使用的公司证书。就我而言,我想创建没有私钥的证书,因为它们是在智能卡上生成的,并且永远无法导出。不,卡在密钥生成期间不会生成 CSR。

我在 OpenSSL 中没有找到从唯一公钥创建证书的任何选项。尽管在理论上这是很有可能的。

OpenSSL 中是否有这样做的选项?还有什么办法吗?我需要创建 X509 证书。

谢谢

2个回答

正如AJ Henderson建议的那样,完美的解决方案是让 OpenPGP 卡签署 CSR。事实证明,使用gpgsmCLI 工具可以做到这一点。GnuPG 用户邮件列表中的Damien Goutte-Gattat回答了这个问题:

有没有办法创建一个用存储在卡上的私钥签名的 X509 CSR?

是的,您可以为此使用 gpgsm(1) 工具。

确保您的卡在读卡器中,然后:

 $ gpgsm --armor --output mycsr.pem --gen-key

系统将提示您选择所需的密钥类型,选择“ Existing key from card”(确保您的卡在读卡器中)。然后选择您要使用的卡密钥(签名密钥、加密密钥或身份验证密钥)以及未来证书的预期用途。

程序结束时,系统会提示您输入 PIN 码以签署 CSR。

Scute的文档有一个完整的示例(它使用 gpgsm-gencert.sh,一个已弃用的帮助脚本,而不是上面的命令,但过程几乎相同)。

所以没有必要绕过 CSR,你可以用 GnuPG 制作一个有效的 X509 证书。

是的,你可以绕过这个事实。

  1. 使用任何私钥创建一个假 csr
  2. 即使提供的公钥不是属于生成 csr 时使用的私钥。
  3. 你有你的 X509 和你想要的公钥