我正在尝试使用 openssl(版本 1.0.1.e)在 CSR 中添加“证书策略”扩展。
证书请求者是否允许处理证书策略或只有 CA 应该这样做?
基于
mkreq()
file中的功能openssl/demos/x509/openssl/demos/x509/mkreq.c
,我添加了以下行:add_ext(exts, NID_certificate_policies, "1.3.6.1");
不幸的是,它会导致分段错误。语法是否正确?任何线索有什么问题?
我正在尝试使用 openssl(版本 1.0.1.e)在 CSR 中添加“证书策略”扩展。
证书请求者是否允许处理证书策略或只有 CA 应该这样做?
基于mkreq()
file中的功能openssl/demos/x509/openssl/demos/x509/mkreq.c
,我添加了以下行:
add_ext(exts, NID_certificate_policies, "1.3.6.1");
不幸的是,它会导致分段错误。语法是否正确?任何线索有什么问题?
是的,允许证书请求者插入证书策略或任何其他扩展。但证书颁发机构可能会验证请求或拒绝它。
默认情况下,openssl 配置文件 openssl.cnf 包含以下 CRS 扩展设置:
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
为了支持 certificate_policies 扩展,必须在此部分添加“certificatePolicies”设置。
已解决 add_ext 包含对函数的调用
X509V3_EXT_conf_nid(NULL, NULL, nid, (char *)value);
Context 参数是 NULL,如果你用上下文重写这个函数,你的段错误将被修复。f.例子
int add_ext_by_name(STACK_OF(X509_EXTENSION) *sk, const char *name, const char *value)
{
X509_EXTENSION *ex;
X509V3_CTX ctx;
X509V3_set_ctx_test(&ctx);
ex = X509V3_EXT_nconf(NULL, &ctx, name, value);
if (!ex) {
printf("%s: %s\n", tr("no ext"), name);
return 0;
}
sk_X509_EXTENSION_push(sk, ex);
return 1;
}
拨电至
add_ext_by_name(exts, "certificatePolicies", "1.2.643.100.113.1, 1.2.643.100.113.2");
会成功的。您可以自己编写带有 NID 参数的函数 :)