Conversion de P7B à PEM via OpenSSL

39

Sur Ubuntu, je ne peux pas convertir le certificat en utilisant openssl avec succès.

vagrant@dev:/vagrant/keys$ openssl pkcs7 -print_certs -in a.p7b -out a.cer 
unable to load PKCS7 object <blah blah>:PEM
routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: PKCS7

Avez-vous vu cette erreur avant?

Kevin Meredith
la source
Êtes-vous sûr que le fichier est un p7b?
Zoredache
Le fichier a-t-il été déplacé entre des serveurs ou téléchargé via FTP? S'il s'agit bien du format correct, il semble que le fichier ait été corrompu. Essayez de re-transférer le fichier sur le serveur en mode binaire (si vous utilisez FTP) ou recopiez-le à partir de la source.
Garrett
Je dis que c'est un p7b basé sur le suffixe du fichier. Je l'ai re-téléchargé via Firefox, mais j'ai toujours la même erreur OpenSSL ...
Kevin Meredith
1
@ Kevin Que file a.p7bvous donne-t-il?
Nic Young
@NicYoung - Je viens de recevoir le message d'erreur ci-dessus. Pas de sortie.
Kevin Meredith

Réponses:

55

Essaye ça:

$ openssl pkcs7 -inform der -in a.p7b -out a.cer

Si cela ne fonctionne pas, amène sur une machine Windows et exporte, suivez ce guide.

quanta
la source
8
Notez que le OP avait le paramètre -print_certsdans sa commande. Cela a un impact sur le format de sortie: avec cela, vous obtenez un format PEM (commençant par ----- BEGIN CERTIFICATE -----), et sans cela, vous obtenez un format PKCS # 7 (----- BEGIN PKCS7-- ---)
Sylvain
Cela ne fonctionne que si je laisse tomber la -inform derpartie. Notez également que lors de l’exportation d’une clé à partir du Gestionnaire de certificats Windows, DER et P7B sont deux options distinctes.
Jpaugh
18

Donc, pour combiner les réponses ci-dessus, la commande est la suivante:
openssl pkcs7 -in cert.p7b -inform DER -print_certs -out cert.pem

Vérifié pour fonctionner sur Windows, en utilisant OpenSSL-Win64

/ Merci Bogdan pour avoir repéré l'erreur

Peet van de Sande
la source
8

J'ai suivi ce guide qui vous demande de changer les lignes d'en-tête / pied de page de

-----BEGIN PKCS #7 SIGNED DATA-----
[data]
-----END PKCS #7 SIGNED DATA-----

à

-----BEGIN CERTIFICATE-----
[data]
-----END CERTIFICATE-----

Puis exécutez la commande openssl pkcs7 -in foo.modified.crt -print_certs -out foo.certs(où foo.modified.crtest le fichier dans lequel vous avez enregistré la version modifiée). Cela m'a donné les mêmes résultats que lors d'une exportation de certificat Windows, comme suggéré dans d'autres réponses.

Curtis Gibby
la source
5

Pour autant que je sache, les éléments suivants devraient convertir un certificat pkcs7 en un pem

openssl pkcs7 -in certificate_file.p7b -print_certs -out cert.pem
Giuseppe Urso
la source
1
Pourquoi voulez-vous dire que cette réponse est liée à ce fil? Parce que comme tu vois. C'est pareil que ci-dessus.
msavara
3

solution rapide dans mon cas (beaucoup de fichiers avec en-tête / pied de page manquant):

base64 -d $FILE | openssl pkcs7 -inform DER -print_certs

Cerber
la source
1
J'avais un certificat encodé en base64 et je n'en savais plus rien et la commande base64 -d m'a épargné beaucoup de problèmes. Cette solution devrait être plus facilement disponible dans les résultats de recherche. Merci!
2

J'ai eu ce problème également. J'allais vérifier un fichier p7b que j'ai copié à partir d'un hôte Win7.

J'ai découvert que gnome keyring peut importer le certificat. De là, il est facile d'exporter vers DER

Joakim
la source