добавление расширения политик сертификатов в CSR

Я пытаюсь добавить расширение политик сертификатов в CSR, используя openssl (версия 1.0.1.e).

  1. Разрешено ли инициатору запроса сертификата иметь дело с политиками сертификатов или это должен делать только CA?

  2. На основе функции mkreq() в файле openssl/demos/x509/openssl/demos/x509/mkreq.c я добавил следующую строку:

     add_ext(exts, NID_certificate_policies, "1.3.6.1");
    

К сожалению, это приводит к ошибке сегментации. Синтаксис правильный? Любая подсказка, что не так?


person Gaston    schedule 09.09.2013    source источник


Ответы (2)


  1. Да, инициатору запроса сертификата разрешено вставлять политику сертификата или любое другое расширение. Но центр сертификации может подтвердить запрос или отклонить его.

  2. По умолчанию файл конфигурации openssl openssl.cnf включает следующие настройки расширения CRS:

    [ v3_req ]
    
    # Extensions to add to a certificate request
    
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment 
    

Для поддержки расширения certificate_policies настройки «certificatePolicies» должны быть добавлено в этот раздел.

person Gaston    schedule 14.10.2013

Решенный add_ext содержит вызов функции

X509V3_EXT_conf_nid(NULL, NULL, nid, (char *)value);

Аргумент Context равен NULL, если вы перепишете эту функцию с контекстом, и ваш segfault будет исправлен. е.пример

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 вы можете написать сами :)

person NMorozov    schedule 23.07.2019