我在使用OpenSSL提供的示例创建带有v3扩展名的证书请求时遇到问题。整个代码可以在Openssl / demos / x509 /
中的mkreq.c中找到为证书请求添加一些x509v3扩展名正常。 我可以添加密钥用法或主题备用名称
add_ext(exts, NID_key_usage, "critical,digitalSignature,keyEncipherment");
add_ext(exts, NID_subject_alt_name, "email:steve@openssl.org");
但是当我尝试添加一个AuthorityKeyIdentifier时,这不起作用......
add_ext(exts, NID_authority_key_identifier, "keyid,issuer");
mkreq中也提供了add_ext:
int add_ext(STACK_OF(X509_REQUEST) *sk, int nid, char *value)
{
X509_EXTENSION *ex;
ex = X509V3_EXT_conf_nid(NULL, NULL, nid, value);
if (!ex)
return 0;
sk_X509_EXTENSION_push(sk, ex);
return 1;
}
有人知道为什么有些扩展工作而有些扩展无效?当我为自签名添加相同的扩展时,它的工作正常......
答案 0 :(得分:0)
重新研究一段时间后,似乎无法进行此操作,因为您在创建证书申请时不知道CA ...
答案 1 :(得分:0)
我发现以下值得分享,但我不确定这与您的情况有关。
在命令行上生成自签名证书时,某些扩展的顺序很重要。如果希望将keyid用作权限密钥id,则必须首先声明subjectKeyIdentifier。
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
在这种情况下,将使用keyid填充authorityKeyIdentifier,并且不会使用发行者。
如果以相反的顺序声明,则将使用颁发者填充authorityKeyIdentifier。可能是因为程序试图基于subjectKeyIdentifier初始化authorityKeyIdentifier。
如果您声明authorityKeyIdentifier = keyid:always
,则会引发硬错误,因为keyid未知。
我希望它会帮助别人。我花了一段时间才解决这个问题。