OpenSSL Converter PEM para PFX usando chave privada RSA


1

Eu estou tentando usar o OpenSSL para converter um arquivo PEM e chave privada RSA para um arquivo PFX. Aqui está o comando de exemplo que eu tentei usar:

openssl pkcs12 -export -out cert.pfx -inkey key.pem -in cert.pem

Ao fazer isso, recebo a seguinte mensagem de erro:

unable to load private key
9068:error:0906D06C:PEM routines:PEM_read_bio:no start 
line:pem_lib.c:696:Expecting: ANY PRIVATE KEY

O arquivo cert é assim:

-----BEGIN CERTIFICATE-----
....
-----END CERTIFICATE-----

e a chave privada se parece com isso:

-----BEGIN RSA PRIVATE KEY-----
....
-----END RSA PRIVATE KEY-----

Eu investiguei o erro, mas ainda não encontrei uma solução.

EDITAR

Depois de algumas pesquisas adicionais, parece ser um problema com diferentes versões do openssl.

Se eu executar no meu sistema OSX que está executando 0.9.8zh 14 de janeiro de 2016, estas instruções funcionam bem.

No entanto, se eu executá-lo em uma máquina Windows com a versão OpenSSL 1.0.1p 9 de julho de 2015 e OpenSSL 1.1.0g 2 de novembro de 2017, obtenho os erros acima.


Funciona para mim! Faz openssl rsa -in <private key filename> -noout -text mostrar detalhes da chave ou um erro? Talvez o arquivo da chave privada esteja corrompido? Se funcionar, converta-a em uma chave privada PKCS # 8 com openssl pkcs8 -in <private key file> -topk8 -nocrypt -out <new private key file> e tente gerar um PKCS # 12 com isso.
garethTheRed

@garethTheRed: Obrigado. Esta informação adicional foi muito útil para me aprofundar no problema.
thxmike

Respostas:


0

Depois de algumas descobertas, descobri que foram os scripts do Powershell que geraram os arquivos chave e cert.

Usando o Notepad ++ no Windows e o Tex-Edit Plus no OSX para identificar caracteres ocultos, descobri que os arquivos tinham [cr] extras no final.

Usando o comando

openssl rsa -in <private key file> -noout -text
openssl x509 -in <cert file> -noout -text

São boas verificações para a validade dos arquivos

Como minha origem era codificada em base64, acabei usando o comando certutil no Windows (por exemplo)

certutil -f -decode cert.enc cert.pem
certutil -f -decode key.enc cert.key

no windows para gerar os arquivos. Depois que os arquivos estavam corretos, o comando OpenSSL acima funcionou conforme o esperado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.