Как вывести список сертификатов, хранящихся в хранилище ключей PKCS12 с помощью keytool?

88

Я хотел перечислить сертификаты, хранящиеся в хранилище ключей PKCS12.

Хранилище ключей имеет расширение .pfx

Давид Гарсиа Гонсалес
источник

Ответы:

146

Если хранилище ключей имеет тип PKCS12 ( .pfx), вы должны указать его с помощью -storetype PKCS12(разрывы строк добавлены для удобства чтения):

keytool -list -v -keystore <path to keystore.pfx> \
    -storepass <password> \
    -storetype PKCS12
Давид Гарсиа Гонсалес
источник
6
Если вы предпочитаете утилиту с графическим интерфейсом, я нашел Keystore Explorer, замену GUI с открытым исходным кодом для утилит командной строки Java keytool, jarsigner и jadtool. keystore-explorer.sourceforge.net
Дэвид Гарсиа Гонсалес
Спасибо за подсказку @David. Приятно видеть, что проект все еще активен, в отличие от многих других подобных проектов!
Джон Рикс
отличный совет по этому бесплатному инструменту - я обычно предпочитаю командные строки, но это очень приятно
Rhubarb
1
Должно ли это работать с ( .p12)? Я получаюjava.io.IOException: Invalid keystore format
IgniteCoders
Это не работает с хранилищем сертификатов P12 (март 2019, новейшая версия KeyTool)
Харальд Коппулс,
29

Вы также можете использовать opensslдля достижения той же цели:

$ openssl pkcs12 -nokeys -info \
    -in </path/to/file.pfx> \
    -passin pass:<pfx's password>

MAC Iteration 2048
MAC verified OK
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
Bag Attributes
    localKeyID: XX XX XX XX XX XX XX XX XX XX XX XX XX 48 54 A0 47 88 1D 90
    friendlyName: jedis-server
subject=/C=US/ST=NC/L=Raleigh/O=XXX Security/OU=XXX/CN=something1
issuer=/C=US/ST=NC/L=Raleigh/O=XXX Security/OU=XXXX/CN=something1
-----BEGIN CERTIFICATE-----
...
...
...
-----END CERTIFICATE-----
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
slm
источник
3
Просто сказать, что это работает и для файлов .p12. Очень полезно, спасибо!
Рич Росс
@PhilipRego, конечно, можете, просто заключите их в одинарные кавычки.
ОДС
Я хотел увидеть псевдоним или дружеское имя. Пришлось использовать «openssl pkcs12 -nodes -in </path/to/file.pfx> -passin pass: <пароль pfx>»
Домо
3

Вы можете перечислить записи (сведения о сертификатах) с помощью keytool, и даже вам не нужно указывать тип хранилища.

keytool -list -v -keystore cert.p12 -storepass <password>

 Keystore type: PKCS12
 Keystore provider: SunJSSE

 Your keystore contains 1 entry
 Alias name: 1
 Creation date: Jul 11, 2020
 Entry type: PrivateKeyEntry
 Certificate chain length: 2
Гарри
источник
Пожалуйста, рассмотрите возможность объяснения вашего кода и того, как он может помочь, чтобы другие могли извлечь из этого пользу.
Амит Верма,
Обновил ответ.
Гарри
2

В вопросе и во всех ответах отсутствует то, что вам может понадобиться кодовая фраза для чтения общедоступных данных из хранилища ключей PKCS # 12 (.pfx). Нужна ли вам кодовая фраза или нет, зависит от того, как был создан файл PKCS # 12. Вы можете проверить структуру файла ASN1 (запустив его через парсер ASN1, openssl или certutil тоже могут это сделать), если данные PKCS # 7 (например, префикс OID 1.2.840.113549.1.7) указаны как «зашифрованные» или со спецификацией шифра или если расположение данных в дереве asn1 ниже зашифрованного узла, вы не сможете прочитать их без знания парольной фразы. Это означает, что ваша команда openssl pkcs12 завершится ошибкой (вывод зависит от версии). Для тех, кто задается вопросом, почему вам может быть интересен сертификат PKCS # 12 без знания парольной фразы. Представьте, что у вас есть много хранилищ ключей и много фраз, и вы действительно плохо умеете их организовывать, и вы не хотите проверять все комбинации, сертификат внутри файла может помочь вам узнать, какой это может быть пароль. Или вы разрабатываете программное обеспечение для миграции / обновления хранилища ключей, и вам нужно заранее решить, какую процедуру инициировать на основе содержащегося сертификата без вмешательства пользователя. Таким образом, последние примеры работают без парольной фразы в зависимости от структуры PKCS # 12. Или вы разрабатываете программное обеспечение для миграции / обновления хранилища ключей, и вам нужно заранее решить, какую процедуру инициировать на основе содержащегося сертификата без вмешательства пользователя. Таким образом, последние примеры работают без парольной фразы в зависимости от структуры PKCS # 12. Или вы разрабатываете программное обеспечение для миграции / обновления хранилища ключей, и вам нужно заранее решить, какую процедуру инициировать на основе содержащегося сертификата без вмешательства пользователя. Таким образом, последние примеры работают без парольной фразы в зависимости от структуры PKCS # 12.

Просто хотел добавить это, потому что сам не нашел ответа и потратил много времени, чтобы разобраться.

xordonkey
источник
2
openssl pkcs12 -info -in keystore_file
Михал Рудницкий
источник