Работа с openssl для извлечения информации из сертификата pkcs12
Мне нужна помощь с командой openssl. Мне нужно автоматизировать извлечение строки subject = в сертификате pkcs12 для script, над которым я работаю.
Я использовал openssl для просмотра содержимого Identity/Certificate:
openssl pkcs12 -info -in /Users/[user]/Desktop/ID.pfx
Но мне вводится три раза за пароль. Я использовал -passin, чтобы исключить одно из подсказок пароля, но мне все еще будет предложено ввести пароль PEM и запись проверки.
Мне нужно выяснить способ передачи ${password} для двух других проблем с паролем или проблема с кодом ctl-c. Часть информации, которая мне нужна, выводится на stdout перед второй подсказкой пароля.
Любая помощь будет оценена!
Очевидно, я портил вывод сертификата для этого сообщения.... но вы должны получить представление о том, что я вижу:
bash-3.2# openssl pkcs12 -info -in /Users/[user]/Desktop/ID.pfx -passin pass:${password}
MAC Iteration 2048
MAC verified OK
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
Bag Attributes
localKeyID: ****
friendlyName: ****
subject=****
issuer=****
-----BEGIN CERTIFICATE-----
::HASH REMOVED::
-----END CERTIFICATE-----
PKCS7 Data
Shrouded Keybag: ****
Bag Attributes
localKeyID: ****
friendlyName: ****
Key Attributes: <No Attributes>
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info:
::HASH REMOVED::
-----END RSA PRIVATE KEY-----
bash-3.2#
Ответы
Ответ 1
Попробуйте следующее:
openssl pkcs12 -in ~/cert.p12 -nodes -passin pass:"my password" | openssl x509 -noout -subject
Или это для общепринятого имени (ruby to strip trailing whitespace):
openssl pkcs12 -in ~/cert.p12 -nodes -passin pass:"my password" | openssl x509 -noout -subject | awk -F'[=/]' '{print $6}'
.strip`
Ответ 2
Копирование ответа здесь, чтобы удалить этот вопрос из фильтра "Без ответа":
openssl pkcs12 -nokeys -in /Users/[User]/Desktop/ID.pfx -passin pass:${password}
Ответ 3
Вы также можете использовать -passin
и -passout
, которые не будут запрашивать вас снова для ввода вручную. Вот пример кода:
openssl pkcs12 -in seldpush_dev.p12 -passin pass:$password -passout pass:$password | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | \
openssl x509 -subject -noout
В принципе, используйте -keyword
для извлечения этого значения. В вашем случае -subject
.
Ответ 4
Это несколько лет спустя; Я не знаком с openssl и т.д.; но поскольку я не вижу ссылки на "-nokeys", я дам то, что работает для меня.
echo -e "$password\n$passphrase\n$passphrase\n" \
| openssl pkcs12 -in /Users/[user]/Desktop/ID.pfx -passin stdin -passout stdin
из manpage
stdin read the password from standard input.