如何仅使用公钥使用 OpenSSL 创建 X.509 证书?
在这种情况下,我只有待认证的公钥(PEM 格式),我需要从中创建 X.509 证书。此给定公钥应位于X.509 证书中。待认证公钥的SubjectPublicKeyInfo
私钥在此情况下不可用!
但是,当然,用于签署证书的颁发者(CA) 密钥是可用的,包括私钥。我知道我需要私钥来签署证书 😏
现在,我明白了待认证的公钥通常包装在 CSR 中。并且 CSR 通常由待认证公钥的私钥签名。但是,如前所述,我这里没有CSR,只有“普通”待认证公钥。从技术上讲,这根本不是问题。但是 OpenSSL 能以这种方式创建 X.509 证书吗?
我发现最接近的是:
openssl x509 -new -key ca_key.pem -force_pubkey tbs_pubkey.pem -subj "/CN=Test"
不幸的是,上述命令生成了一个看起来像“自签名”的证书,其中包含来自的公钥,tbs_pubkey.pem
并由来自的私钥签名ca_key.pem
,因此生成的“自签名”证书的签名实际上是无效的……☹️
这是一个快速而简单的根 CA:
以下是向新证书添加扩展的 OpenSSL 配置文件示例:
这是我的孤独(EC)公钥:
现在强制将其转换为由 CA 签名的证书:
关键(请原谅这个双关语)是使用
-CAkey
并将-CA
OpenSSL 指向 CA 的私钥和证书。后者的主题将用作新证书中的颁发者。请注意,由 RSA 根密钥签名的小型 ECC 公钥。此外,主题和发行者是正确的,并且添加了来自文件的扩展名。
警告:
这对于测试、播放等来说没问题,但您不应该使用受信任的 CA 证书执行此操作,因为如果不使用公钥对应的私钥,您就无法证明拥有该私钥。
CA 应该拒绝此类请求,因为没有证据表明公钥属于主体所有。
有关详细信息,请参阅RFC 4211