Назад | Перейти на главную страницу

Пользовательское расширение Openssl

Я знаю, как создавать сертификаты x509 с помощью командной строки openssl. Но теперь я хочу создать его с собственным расширением. Как я могу сделать это с помощью командной строки openssl?

Вот пример добавления набора расширений возможностей клиента S / MIME при подписании сертификата пользователя S / MIME, взятого из пример в списке рассылки OpenSSL:

[my_cert_extensions]
basicConstraints         = CA:FALSE
keyUsage                 = critical, keyEncipherment, dataEncipherment
SMIME-CAPS               = ASN1:SEQUENCE:smime_seq
subjectKeyIdentifier     = hash
authorityKeyIdentifier   = keyid,issuer

[ smime_seq ]
SMIMECapability.0 = SEQWRAP,OID:sha1
SMIMECapability.1 = SEQWRAP,OID:sha256
SMIMECapability.2 = SEQWRAP,OID:sha1WithRSA
SMIMECapability.3 = SEQWRAP,OID:aes-256-ecb
SMIMECapability.4 = SEQWRAP,OID:aes-256-cbc
SMIMECapability.5 = SEQWRAP,OID:aes-256-ofb
SMIMECapability.6 = SEQWRAP,OID:aes-128-ecb
SMIMECapability.7 = SEQWRAP,OID:aes-128-cbc
SMIMECapability.8 = SEQWRAP,OID:aes-128-ecb
SMIMECapability.9 = SEQUENCE:rsa_enc

[ rsa_enc ]
capabilityID = OID:rsaEncryption
parameter = NULL

Это активируется, среди прочего, использованием openssl параметр командной строки -extensions my_cert_extensions.

У пазла есть еще две части:

  • более подробная информация о том, как могут быть созданы данные расширения, находится в документации OpenSSL API. Вот, но вам нужно знать немного о ASN.1 и OID чтобы понять это.
  • если ваше расширение действительно индивидуальное, вам, вероятно, следует подать заявление в IANA для Номер частного предприятия (это обязательно, если ваши расширения можно увидеть в дикой природе)

Если вы хотите добавить текст с помощью существующий расширение обычно немного проще, если у вас есть:

[ CA_default ]
...
x509_extensions = usr_cert

[ usr_cert ]
basicConstraints=CA:FALSE
...
nsComment = "This is my comment"

CA_default используется во время обычного подписания CA, если вы можете использовать предопределенное расширение, то все, что вам нужно сделать, это добавить его в usr_cert раздел, никаких дополнительных параметров командной строки не требуется. (nsComment технически устарел, но он по-прежнему работает, это простой пример, который легко просмотреть в свойствах сертификата в обычных браузерах).

Увидеть x509v3_config страница руководства который объясняет основы расширений и исходный код OpenSSL крипто / объекты / объекты.txt для несколько загадочных деталей (этот файл обрабатывается и используется для генерации кода).

OID обычно ассоциируется с дискретным понятием, например существительное, а глагол, атрибут или даже что-то менее осязаемое (например, UUID, но иерархическое). nsComment имеет определенное значение (текстовые комментарии произвольной формы внутри сертификатов), другие, такие как keyUsage имеют более строгую семантику.

В OpenSSL имя «nsComment» сопоставляется с OID 2.16.840.1.113730.1.13, как установлено в objects.txt. Каждое расширение в сертификате X.509v3 имеет OID, см. https://stackoverflow.com/questions/15299201/asn-1-octet-strings .

Если в OpenSSL нет подходящего расширения (см. RFC 5280 §4.2 Расширения сертификатов), вы можете найти один и добавить его (см. раздел «Произвольные расширения» в x509v3_config страницу руководства, указанную выше). В противном случае вам нужно будет определить OID для ваших собственных целей.

Добавьте собственное расширение либо в пользовательский файл конфигурации openssl.cnf, либо в конкретный файл расширений и укажите его в командной строке, например.

openssl ca -config ./my-openssl.cnf -extensions ./my-openssl-extensions.cnf <options>

На странице руководства:

-расширения раздел файла конфигурации, содержащий расширения сертификатов, которые будут добавлены при выдаче сертификата (по умолчанию x509_extensions, если не используется параметр -extfile). Если раздел расширения отсутствует, создается сертификат V1. Если раздел расширения присутствует (даже если он пуст), создается сертификат V3. Увидеть x509v3_config(5) справочную страницу для получения подробной информации о формате раздела расширения.