Что такое атрибуты bag и как их генерировать?

при преобразовании некоторых сертификатов из хранилища ключей в openssl / pem я впервые заметил, что к сертификатам добавлены "атрибуты мешка".

выглядит так:

Bag Attributes
    friendlyName: CN=PositiveSSL CA,O=Comodo CA Limited,L=Salford,ST=Greater Manchester,C=GB
subject=/C=GB/ST=Greater Manchester/L=Salford/O=Comodo CA Limited/CN=PositiveSSL CA
issuer=/C=US/ST=UT/L=Salt Lake City/O=The USERTRUST    Network/OU=http://www.usertrust.com/CN=UTN-USERFirst-Hardware

служат ли они какой-либо функции?

Я заметил, что они мне нравятся, потому что они делают мои цепные файлы (конкатенацию сертификатов) более ясными. К сожалению, сертификаты ca, которые я загружаю, не имеют их.

Итак, как их генерировать?

1 ответов


если быть точным, вы, по-видимому, имеете в виду преобразование (или просто чтение) с openssl pkcs12 (import) утилита файл PKCS#12, который может поддерживаться Java как хранилище ключей, но не был по умолчанию (обновление) до Java9 в 2017. PKCS#12 был разработан и обычно используется для privatekey и сертификата(ов) (обычно несколько) для этого ключа, хотя формат достаточно гибок, чтобы позволить одинокий сертификат(ы). В OpenSSL командная строка pkcs12 -export требуется закрытый ключ, хотя он будет добавить "дополнительные" сертификаты и программа, вызывающая API можно, видимо, не закрытый ключ. По моему опыту, Java не поддерживала Lone cert(ы) в PKCS#12 до версии 8, а в моих 8 и 9 имеет два атрибуты: pkcs9.friendlyname и 2.16.840.1.113894.746875.1.1 что, видимо, Оракул-определенными trustedKeyUsage. Большинство одиночных сертификатов не хранятся и не загружаются как PKCS#12.

PKCS#12 определяется в терминах нескольких (немного разных) структур "мешка", которые содержат различные вещи, в первую очередь privatekeys и сертификаты с дополнительными атрибутами, которые неудивительно называют "атрибутами сумки"; ваш случай (по-видимому) имеет только сертификат(ы). Эти атрибуты следуют теперь обычной структуре произвольного числа пар OID плюс значение в зависимости от OID. Примечание в вашем дисплее только friendlyName - атрибут сумки, указанный, поскольку он имеет отступ под заголовком.

на subject= и issuer= строки поля от само совершенство которой openssl pkcs12 (import) утилита извлекает и печатает для удобства. Если этого достаточно, вы можете отобразить их для любого сертификата с помощью x509 утилита; в частности, если вы хотите иметь их перед PEM-кодированным сертификатом "blob" в пути pkcs12 выходной же, использовать openssl x509 -in infile -subject -issuer -out outfile. Это делает один сертификат, поэтому, если у вас есть цепочка в файле PEM, вам нужно разделить ее на части и сделать каждый сертификат отдельно, и, возможно, объединить снова после этого; например, что-то как

# split into files cert_1, cert_2, etc.
$ awk <chain.pem -va="openssl x509 -subject -issuer >cert_" 
  '/^-----BEGIN/{b=a (++n);x=1}x{print|b}/^-----END/{close(b);x=0}'

# output entire "bag" to stdout (with blank lines between certs)
$ awk <chain.pem -va="openssl x509 -subject -issuer" \
  '/^-----BEGIN/{b=a;x=1}x{print|b}/^-----END/{close(b);x=0;print""}'

для сравнения:openssl s_client -showcerts делает что-то очень похожее: он выводит субъект и эмитент с каждым blob сертификата из полученной цепочки, помечая их номером уровня, "s:" и "i:".