Я знаю, как создавать сертификаты 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
.
У пазла есть еще две части:
Если вы хотите добавить текст с помощью существующий расширение обычно немного проще, если у вас есть:
[ 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)
справочную страницу для получения подробной информации о формате раздела расширения.