Что такое атрибуты 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:".