third-party-ca
我想使用自己的根CA () 对第三方根CA ( r1
) 进行交叉签名。(背景:限制使用)
为此,我使用
openssl x509-in third-party-ca.crt -CA /etc/pki/r1/ca.crt -CAkey /etc/pki/r1/private/ca.key -out third-party-ca-cross-signed.crt -set_serial 1000
这可行,但会保留 的Authority Key Identifier
,third-party-ca
需要将其更改为 的Subject Key Identifier
。r1
(有关实际示例,请参阅 letsencryptISRG X1 交叉签名经过DST 根 CA X3)
我可以Authority Key Identifier
通过创建akiext
并使用 来添加另一个-extfile akiext
。但是,这会导致两个Authority Key Identifier
。
我怎样才能替换现有的Authority Key Identifier
?
答案1
在openssl x509
命令行中,您无法有选择地删除扩展;您可以使用-clrext
删除全部输入扩展名并配置您-extfile
想要的预先存在的扩展名(至少 BC 和 KU)加新的证书。请注意,公共下属或跨 CA 证书(例如您链接的证书)可能包含 AIA 和/或 CRLDP 以及 AKI,全部其中仅对您要替换的发行人/母公司而言正确,因此应被替换(或删除)。
或者,您可以编写代码;使用API很简单。但这可能属于 SO 或或许security.SX 而不是这里。(并且您需要完成部分工作。)
在您的具体示例中,ISRG Root X1 可由 Identtrust DST X3 交叉签名,并且作为根-- 如果你从根证书开始,它就没有 AKI或者需要删除的 AIA/CRLDP。
更新:据透露后续相关问题OpenSSL 3.0.0 以上版本不允许非 root 输入情况;它要求旧证书是自签名的(root)。源代码中的注释表明这一直是有意为之,尽管之前并未有效执行。