Openssl 在CSR中添加证书策略扩展

Openssl 在CSR中添加证书策略扩展,openssl,x509certificate,csr,ca,certificate-authority,Openssl,X509certificate,Csr,Ca,Certificate Authority,我正在尝试使用openssl(版本1.0.1.e)在CSR中添加一个“证书策略”扩展 是允许证书请求者处理证书策略,还是只有CA可以处理 基于文件openssl/demos/x509/openssl/demos/x509/mkreq.c中的函数mkreq(),我添加了以下行: add_ext(exts, NID_certificate_policies, "1.3.6.1"); 不幸的是,它导致了分段错误。 语法正确吗?有什么不对劲的线索吗 是,允许证书请求者插入证书

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

  • 是允许证书请求者处理证书策略,还是只有CA可以处理

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

     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 
    

  • 为了支持证书策略扩展,“CertificatePolicys”设置。

    已解决的添加扩展包含对函数的调用

    X509V3_EXT_conf_nid(NULL, NULL, nid, (char *)value);
    
    如果使用上下文重写此函数,则上下文参数为NULL,并且segfault将被修复。 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参数的函数,您可以自己编写:)