Создать сертификат 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. Это имя не используется при сохранении сертификата.