Converta de P7B para PEM via OpenSSL

39

No Ubuntu, não consigo converter o certificado usando o openssl com ê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

Você já viu esse erro antes?

Kevin Meredith
fonte
Você tem certeza de que o arquivo é um p7b?
precisa
O arquivo foi movido entre servidores ou enviado via FTP? Se é realmente o formato correto, parece que ele pode ter sido corrompido. Tente transferir novamente o arquivo para o servidor no modo binário (se estiver usando FTP) ou copie-o novamente da fonte.
Garrett
Eu digo que é um p7b baseado no sufixo do arquivo. Eu re baixado-lo via Firefox, mas eu ainda tenho o mesmo erro OpenSSL ...
Kevin Meredith
11
@ Kevin O que file a.p7bvocê tem?
18712 Nic Young
@ NicYoung - Acabei de receber a mensagem de erro acima. Sem saída.
22812 Kevin Meredith

Respostas:

55

Tente o seguinte:

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

Se não funcionar, é trazido para uma máquina Windows e exportado, siga este guia.

quanta
fonte
8
Observe que o OP tinha o parâmetro -print_certsem seu comando. Ela afeta o formato de saída: com ele, você obtém um formato PEM (começando com ----- BEGIN CERTIFICATE -----), e sem ele, você obtém um formato PKCS # 7 (----- BEGIN PKCS7-- ---)
Sylvain
Isso só funciona se eu largar a -inform derpeça. Observe também que, ao exportar uma chave do Windows Cert Manager, o DER e o P7B são duas opções distintas.
jpaugh 17/10
18

Então, para combinar as respostas acima, o comando é:
openssl pkcs7 -in cert.p7b -inform DER -print_certs -out cert.pem

Verificado como funcionando no Windows, usando o OpenSSL-Win64

/ Bogdan Obrigado por detectar o erro

Peet van de Sande
fonte
8

Segui este guia que o instrui a alterar as linhas de cabeçalho / rodapé de

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

para

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

Em seguida, execute o comando openssl pkcs7 -in foo.modified.crt -print_certs -out foo.certs(onde foo.modified.crtestá o arquivo em que você salvou a versão modificada). Isso me deu os mesmos resultados da execução de uma exportação de certificado do Windows, conforme sugerido em outras respostas.

Curtis Gibby
fonte
5

Tanto quanto eu sei, o seguinte deve converter um certificado pkcs7 em um pem

openssl pkcs7 -in certificate_file.p7b -print_certs -out cert.pem
Giuseppe Urso
fonte
Por que você quer dizer que esta resposta está relacionada a este tópico? Porque como você vê. É o mesmo que acima.
msavara
3

solução rápida no meu caso (muitos arquivos com cabeçalho / rodapé ausentes):

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

Cerber
fonte
11
Eu tinha um certificado codificado em base64 e não sabia mais nada sobre ele, e o comando base64 -d me salvou de muitos problemas. Essa solução deve estar mais prontamente disponível nos resultados da pesquisa. Obrigado!
2

Eu tive esse problema também. Ia verificar um arquivo p7b que copiei de um host Win7.

Eu descobri que o chaveiro do gnome pode importar o certificado. A partir daí, é fácil exportar para o DER

Joakim
fonte