在CSR中添加证书策略扩展

时间:2013-09-09 10:27:01

标签: openssl x509certificate csr ca certificate-authority

我正在尝试使用openssl(版本1.0.1.e)在CSR中添加“证书策略”扩展。

  1. 是否允许证书请求者处理证书策略,或者只有CA应该这样做?

  2. 根据文件mkreq()中的函数openssl/demos/x509/openssl/demos/x509/mkreq.c,我添加了以下行:

    add_ext(exts, NID_certificate_policies, "1.3.6.1");
    
  3. 不幸的是,它会导致分段错误。 语法是否正确?有什么问题的线索?

    由于

2 个答案:

答案 0 :(得分:3)

  1. 是的,允许证书请求者插入证书策略或任何其他扩展名。但证书颁发机构可能会验证请求或拒绝它。

  2. 默认情况下,openssl配置文件openssl.cnf包含以下CRS扩展设置:

    [ v3_req ]
    
    # Extensions to add to a certificate request
    
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment 
    
  3. 为了支持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参数的函数:)