Я пытаюсь создать PKI с помощью инструментов командной строки OpenSSL. Сертификаты конечных объектов должны иметь настраиваемое расширение с настраиваемым OID, в котором будет содержаться дополнительная информация. До сих пор мне удавалось получить пользовательское расширение с моим собственным OID в сертификатах, единственная проблема, с которой я сталкиваюсь, заключается в том, что это добавляет только одно поле. Мне нужен целый модуль ASN.1, как мы видим со стандартными расширениями, такими как Basic Constraints. Есть ли способ сделать это с помощью инструментов командной строки OpenSSL и файлов конфигурации?
В следующем документе показано, что можно указать собственные модули ASN.1, но я не могу найти способ передать это в CSR, а оттуда в сертификат. https://www.openssl.org/docs/man1.0.2/man3/ASN1_generate_v3.html
Нашел. В конфигурации, используемой для создания сертификата или CSR, можно использовать информацию, указанную на указанной выше странице руководства. Модуль ASN.1 описан так, как указано, и можно указать OpenSSL написать расширение в соответствии с этим описанием, начав с ASN1:Type:NextSection
. В разделах, описывающих каждый уровень модуля ASN.1, ключевое слово ASN1 больше не требуется.
...
[ usr_ext ]
# Extensions for client certificates (`man x509v3_config`).
keyUsage = digitalSignature
1.2.3.4.5.6.7.8.9 = ASN1:SEQUENCE:CustomExt
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
[CustomExt]
wrappingSeq = SEQUENCE:ExtOid
key = FORMAT:HEX,BITSTRING:abcdef1234556789
[ExtOid]
oid = OID:1.3.101.110
Это заканчивается кодированием следующим образом
SEQUENCE
OBJECT IDENTIFIER 1.2.3.4.5.6.7.8.9
OCTET STRING
SEQUENCE
OBJECT IDENTIFIER 1.3.101.110
BITSTRING 0xabcdef1234556789