Работа с openssl для извлечения информации из сертификата pkcs12 - PullRequest
29 голосов
/ 14 декабря 2011

Мне нужна помощь с командой openssl. Мне нужно автоматизировать получение строки subject = в сертификате pkcs12 для скрипта, над которым я работаю.

Я использовал openssl для просмотра содержимого удостоверения / сертификата:

openssl pkcs12 -info -in /Users/[user]/Desktop/ID.pfx

Но мне три раза предлагается ввести пароль. Я использовал -passin для исключения одного из запросов пароля, но мне все еще предлагается ввести пароль PEM и запись подтверждения.
Мне нужно найти способ передать $ {пароль} двум другим запросам пароля или сделать скрипт ctl-c. Часть необходимой информации выводится на стандартный вывод перед вторым запросом пароля.

Любая помощь будет оценена!

Очевидно, я выпотрошил вывод сертификата для этого поста .... но вы должны понять, что я вижу:

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# 

Ответы [ 4 ]

28 голосов
/ 23 апреля 2013

Попробуйте:

$ openssl pkcs12 -in ~/cert.p12 -nodes \
    -passin pass:"my password" | openssl x509 -noout -subject

Или это для общего имени (рубин, чтобы убрать конечные пробелы):

$ openssl pkcs12 -in ~/cert.p12 -nodes \
    -passin pass:"my password" | openssl x509 -noout -subject \
    | awk -F'[=/]' '{print $6}'`.strip`
10 голосов
/ 04 марта 2012

Копирование ответа сюда для того, чтобы удалить этот вопрос из фильтра «Без ответа»:

openssl pkcs12 -nokeys -in /Users/[User]/Desktop/ID.pfx -passin pass:${password}
4 голосов
/ 26 мая 2015

Вы также можете использовать -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.

0 голосов
/ 28 сентября 2013

Это на несколько лет позже; Я не знаком с 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.
...