Convierte de P7B a PEM a través de OpenSSL

39

En Ubuntu, no puedo convertir el certificado usando openssl con éxito.

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

¿Has visto este error antes?

Kevin Meredith
fuente
¿Estás seguro de que el archivo es un p7b?
Zoredache
¿Se movió el archivo entre servidores o se cargó a través de FTP? Si realmente es el formato correcto, parece que se ha dañado. Intente volver a transferir el archivo al servidor en modo binario (si usa FTP) o vuelva a copiarlo desde la fuente.
Garrett
Digo que es un p7b basado en el sufijo del archivo. Lo volví a descargar a través de Firefox, pero aún recibí el mismo error de OpenSSL ...
Kevin Meredith
1
@Kevin ¿Qué file a.p7bte da?
Nic Young el
@NicYoung: acabo de recibir el mensaje de error anterior. Ninguna salida.
Kevin Meredith

Respuestas:

55

Prueba esto:

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

Si no funciona, lleva a una máquina Windows y exporta, sigue esta guía.

quanta
fuente
8
Tenga en cuenta que el OP tenía el parámetro -print_certsen su comando. Afecta el formato de salida: con él obtienes un formato PEM (comenzando con ----- BEGIN CERTIFICATE -----), y sin él obtienes un formato PKCS # 7 (----- BEGIN PKCS7-- ---)
Sylvain
Esto solo funciona si dejo caer la -inform derpieza. Tenga en cuenta también que al exportar una clave de Windows Cert Manager, DER y P7B son dos opciones distintas.
jpaugh
18

Entonces, para combinar las respuestas anteriores, el comando es:
openssl pkcs7 -in cert.p7b -inform DER -print_certs -out cert.pem

Verificado para trabajar en Windows, usando OpenSSL-Win64

/ Gracias Bogdan por detectar el error

Peet van de Sande
fuente
8

Seguí esta guía que le indica que cambie las líneas de encabezado / pie de página de

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

a

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

Luego ejecute el comando openssl pkcs7 -in foo.modified.crt -print_certs -out foo.certs(donde foo.modified.crtestá el archivo en el que guardó la versión modificada). Esto me dio los mismos resultados que ejecutar una exportación de certificado de Windows como se sugiere en otras respuestas.

Curtis Gibby
fuente
5

Hasta donde yo sé, lo siguiente debería convertir un certificado pkcs7 a un pem

openssl pkcs7 -in certificate_file.p7b -print_certs -out cert.pem
Giuseppe Urso
fuente
1
¿Por qué quiere decir que esta respuesta está relacionada con este hilo? Porque como ves. Es igual que el anterior.
msavara
3

Solución rápida en mi caso (muchos archivos con falta de encabezado / pie de página):

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

Cerber
fuente
1
Tenía un certificado codificado en base64 y no sabía nada más al respecto y el comando base64 -d me ahorró muchos problemas. Esta solución debería estar más fácilmente disponible en los resultados de búsqueda. ¡Gracias!
2

Yo tuve este problema también. Iba a verificar un archivo p7b que copié de un host Win7.

Descubrí que el llavero gnome puede importar el certificado. Desde allí es fácil exportar a DER

Joakim
fuente