Чтобы быть точным, вы, по-видимому означает, преобразование (или только чтение) с openssl pkcs12 (import)
полезности PKCS # 12 файл, который может поддерживаться Java в хранилище ключей, но не по умолчанию (обновление) до Java9 в 2017. PKCS # 12 был спроектирован и обычно используется для закрытого ключа и сертификата (обычно несколько) для этого ключа, хотя формат достаточно гибкий, чтобы позволить одиночный сертификат (ы). OpenSSL commandlinepkcs12 -export
требует отдельного ключа, хотя он добавит «дополнительные» сертификаты, а программа, вызывающая API, может, по-видимому, не делать никакой секретной клавиши. По моему опыту, Java не поддерживал одиночный сертификат (ы) в PKCS # 12 до версии 8, а в моих 8 и 9 имеет два атрибута: pkcs9.friendlyName и 2.16.840.1.113894.746875.1.1, который, по-видимому, является Oracle -defined trustedKeyUsage. Большинство одиноких сертификатов не хранятся или не загружаются, как PKCS # 12.
PKCS # 12 определен в терминах нескольких (немного отличающихся) «мешков» структур, которые содержат различные вещи, в первую очередь, частные ключи и сертификаты с дополнительными атрибутами, которые неудивительно называются «атрибутами сумки»; ваш случай (по-видимому) имеет только сертификат (ы). Эти атрибуты соответствуют общепринятой структуре произвольного количества пар значения OID плюс в зависимости от OID. Примечание на вашем дисплее только friendlyName
- это атрибут мешка, указанный, потому что он имеет отступ под заголовком.
В subject=
и issuer=
линии поля от самого серт которой openssl pkcs12 (import)
утилита извлекает и печатает для удобства. Если этого достаточно, вы можете отобразить их для любого сертификата с помощью утилиты x509
; в частности, если вы хотите иметь их перед закодированным PEM сертификатом «blob» способом pkcs12
, используйте openssl x509 -in infile -subject -issuer -out outfile
. Это делает один cert, поэтому, если у вас есть цепочка в файле PEM, вам нужно разделить ее на части и выполнить каждый сертификат отдельно и, возможно, снова объединить; например, что-то вроде
$ awk <chainfile -va="openssl x509 -subject \
-issuer >cert_" '/^-----BEGIN/{b=a (++n);x=1}x{print|b}/^-----END/{close(b);x=0}'
$ cat cert_* >newchain # if desired; or just don't redirect
# in the above and use its aggregated stdout
В качестве сравнения, openssl s_client -showcerts
делает что-то очень похожее: он выводит субъект и эмитент с каждым Cert сгустка из полученной цепи, маркируя их с номером уровня «с:» и «I: ».
Спасибо! Это более полный ответ, чем я надеялся. – Scheintod