我正在尝试使用openssl(版本1.0.1.e)在CSR中添加“证书策略”扩展。
是否允许证书请求者处理证书策略,或者只有CA应该这样做?
根据文件mkreq()
中的函数openssl/demos/x509/openssl/demos/x509/mkreq.c
,我添加了以下行:
add_ext(exts, NID_certificate_policies, "1.3.6.1");
不幸的是,它会导致分段错误。 语法是否正确?有什么问题的线索?
由于
答案 0 :(得分:3)
是的,允许证书请求者插入证书策略或任何其他扩展名。但证书颁发机构可能会验证请求或拒绝它。
默认情况下,openssl配置文件openssl.cnf包含以下CRS扩展设置:
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
为了支持certificate_policies扩展,“certificatePolicies”设置have to be added in this section。
答案 1 :(得分:0)
已解决的add_ext包含对函数的调用
X509V3_EXT_conf_nid(NULL, NULL, nid, (char *)value);
Context参数为NULL时,您可以使用context重写此函数,并且您的segfault将被修复。 f.example
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参数的函数:)