web-dev-qa-db-fra.com

Travailler avec openssl pour extraire des informations d'un certificat pkcs12

Je voudrais de l'aide avec la commande openssl. J'ai besoin d'automatiser la récupération de la ligne subject = dans un certificat pkcs12 pour un script sur lequel je travaille.

J'ai utilisé openssl pour afficher le contenu de l'identité/du certificat:

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

Mais je suis invité à trois reprises pour le mot de passe. J'ai utilisé -passin pour éliminer l'une des invites de mot de passe, mais je suis toujours invité à saisir la phrase de passe PEM et l'entrée de vérification.
Je dois trouver un moyen de transmettre $ {mot de passe} aux deux autres défis de mot de passe ou demander au script d'émettre un ctl-c. L'information dont j'ai besoin est envoyée à la sortie standard avant la deuxième invite de mot de passe.

Toute aide serait appréciée!

Évidemment, j'ai vidé la sortie du certificat pour ce post .... mais vous devriez avoir une idée de ce que je vois:

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# 
30
Sonic84

Essaye ça:

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

Ou ceci pour le nom commun (Ruby pour supprimer les espaces de fin):

$ openssl pkcs12 -in ~/cert.p12 -nodes \
    -passin pass:"my password" | openssl x509 -noout -subject \
    | awk -F'[=/]' '{print $6}'`.strip`
31
Alfie Hanssen

Copiez la réponse ici afin de supprimer cette question du filtre "Sans réponse":

openssl pkcs12 -nokeys -in /Users/[User]/Desktop/ID.pfx -passin pass:${password}
10
DreadPirateShawn

Vous pouvez également utiliser -passin et -passout qui ne vous inviterait pas à nouveau pour la saisie manuelle. Voici un exemple de code:

openssl pkcs12 -in seldpush_dev.p12 -passin pass:$password -passout pass:$password | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | \
openssl x509 -subject -noout

Fondamentalement, utilisez -keyword pour récupérer cette valeur. Dans ton cas, -subject.

4
Ajay. A

C'est en retard de quelques années; Je ne connais pas openssl, & etc; mais comme je ne vois aucune référence à "-nokeys", je donnerai ce qui fonctionne pour moi.

echo -e "$password\n$passphrase\n$passphrase\n" \
| openssl pkcs12 -in /Users/[user]/Desktop/ID.pfx -passin stdin -passout stdin

de la page de manuel

stdin     read the password from standard input.
0
acornblue