Создать сертификат x509v3 с пользовательским расширением проблемы CSR

Я пытаюсь добавить пользовательское расширение в CSR, используя openssl API:

struct stack_st_X509_EXTENSION *exts = NULL;
X509_EXTENSION *ex;
exts = sk_X509_EXTENSION_new_null();
ASN1_OCTET_STRING *os = ASN1_OCTET_STRING_new();
nid = OBJ_create("2.5.29.41", "CompanyName", "Company Name");
ASN1_OCTET_STRING_set(os,"ABC Corp",8);   
ex = X509_EXTENSION_create_by_NID( NULL, nid, 0, os );
sk_X509_EXTENSION_push(exts, ex);
X509_REQ_add_extensions(x, exts);

Я запрашиваю сертификат и получаю сертификат через запрос SCEP. (Windows 2008 server) Позже, когда я анализирую сертификат, я вижу, что отображаемое расширение по-прежнему является OID, а не именем расширения "Название компании"

X509v3 extensions:  
2.5.29.41: 
        ABC Corp 

Я правильно добавляю расширение? Как получить расширение имени в сертификате?

Пожалуйста, помогите друзьям..

2 ответа

Это ожидаемое поведение. Ваше расширение с OID=2.5.29.41 не является стандартным для Windows, поэтому вы видите только значение OID. Вам не следует беспокоиться об этом факте, если ваше клиентское приложение знает об этом расширении и может анализировать его содержимое.

Хотя я сильно подозреваю, что вы используете это расширение неправильно. Из того, что я нашел, OID=2.5.29.41 означает basicAttConstraints продление сертификата. Ссылка: http://oidref.com/2.5.29.41. Я нашел пример реализации в Java: класс BasicAttConstraint. Ожидается, что значение будет целым, и его значение аналогично PathLength атрибут расширения сертификата Basic Constraints. Но вы устанавливаете строку там. Это имеет нулевой смысл.

Имя расширения не сохраняется в сертификате. Только его OID.

У зрителей сертификата есть краткая таблица известных расширений и их имя. При отображении расширения в таблице используется имя, в противном случае отображается только OID. В этом случае используемая вами программа просмотра не имеет сохраненного имени для этого расширения.

OBJ_create() Вызов добавляет OID к внутренней таблице именованных OID OpenSSL. Это имя не используется при сохранении сертификата.

Другие вопросы по тегам