将AuthorityKeyIdentifier添加到CertRequest

时间:2013-10-03 15:44:38

标签: c openssl x509certificate x509

我在使用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;
}

有人知道为什么有些扩展工作而有些扩展无效?当我为自签名添加相同的扩展时,它的工作正常......

2 个答案:

答案 0 :(得分:0)

重新研究一段时间后,似乎无法进行此操作,因为您在创建证书申请时不知道CA ...

答案 1 :(得分:0)

我发现以下值得分享,但我不确定这与您的情况有关。

在命令行上生成自签名证书时,某些扩展的顺序很重要。如果希望将keyid用作权限密钥id,则必须首先声明subjectKeyIdentifier。

subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid,issuer

在这种情况下,将使用keyid填充authorityKeyIdentifier,并且不会使用发行者。

如果以相反的顺序声明,则将使用颁发者填充authorityKeyIdentifier。可能是因为程序试图基于subjectKeyIdentifier初始化authorityKeyIdentifier。

如果您声明authorityKeyIdentifier = keyid:always,则会引发硬错误,因为keyid未知。

我希望它会帮助别人。我花了一段时间才解决这个问题。