converter chave .p7b em um .pfx


10

Eu tenho um certificado SSL no formato .p7b que preciso converter para .pfx. Se eu tentar isso através do gerenciamento de certificados do Windows, a opção expert como um .pfx está desativada.

Tentando com o openssl, encontrei os dois comandos a seguir para fazer a conversão:

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer

mas não tenho certeza de qual chave usar para o comando esecond ou a que certificado CACert.cer se refere.

Como posso converter essa chave para o formato .pfx?

Respostas:


20

O PKCS # 7 não inclui a parte privada (chave) de um par de certificado / chave privada; é comumente usado para disseminação de certificado (por exemplo, como resposta a uma solicitação de certificado PKCS # 10, como um meio de distribuir certificados S / MIME usado para criptografar mensagens ou validar mensagens assinadas, etc.). É importante lembrar que é apenas para certificados que são, por definição, itens públicos.

O PKCS # 12 é um contêiner mais universal - destina-se a armazenar a chave privada e as partes do certificado público para que possam ser movimentadas. Ele tem a capacidade de ser protegido por senha para fornecer alguma proteção às chaves.

PFX foi o antecessor do PKCS # 12.

Você não pode (como aponta Anitak) converter do PKCS # 7 para PKCS # 12 sem dados adicionais (a parte da chave privada) porque o PKCS # 7 não possui todos os dados.

Mark Sutton apontou por que você não pode exportar como PFX - o certificado em questão tem sua chave privada sinalizada como não exportável. O provedor de serviços criptográficos (CSP) não permitirá que essa chave seja movida; isso é intencional. A única maneira * de obter um par exportável cert \ key é se o certificado original tiver sido emitido com o conjunto de sinalizadores exportáveis. Também é possível que não haja uma chave privada associada ao certificado, mas estou assumindo que esse não é o caso aqui.

Há um bom resumo dos vários tipos de PKCS na Wikipedia .

  • A única maneira legítima, pelo menos. Dependendo do hardware CSP \ Crypto, pode haver mecanismos, especialmente para CSP apenas de software, mas essa é uma área para pesquisa de vulnerabilidades de segurança apenas no que me diz respeito, não administrador de sistemas.

Obrigado - parece que comprar um novo certificado pode ser mais barato do que recuperá-lo, com base na quantidade de tempo que teremos que lidar com terceiros para fazer isso.
DrStalker 10/11/2009

12

Eu passo por isso a cada 2 anos (quando renovo um certificado de assinatura de código) e é uma dor cada vez.

Uma informação importante é que você pode simplesmente renomear arquivos .p7b para .spc (conforme indicado aqui: http://support.microsoft.com/kb/269395 ).

Você pode usar a ferramenta pvk2pfx.exe para converter seu PVK + SPC em um PFX.

pvk2pfx.exe -pvk input.pvk -pi <existing_input.pvk_password> -spc input.spc -pfx output.pfx -po <new_output.pfx_password>

(você pode pular a etapa de renomeação do p7b e usá-la diretamente; não tentei ...)


isso é muito mais útil do que a resposta aceita. Estou surpreso com o estado do absurdo de assinatura de código. Eu me encolho com o pensamento de ter que repetir isso várias vezes quando os certificados expiram.
Tim

3

Com a ferramenta windows, se a opção pfx estiver desativada, significa que a chave privada não pode ser exportada do armazenamento local. Isso ocorre porque não existe (porque as chaves não foram geradas na caixa que você está usando) ou porque quando você gerou as chaves, a chave privada não foi marcada como exportável e o modelo de certificado do Windows não foi configurado para permitir a exportação.

Suponho que você esteja usando uma autoridade de certificação da Microsoft para emitir seus certificados. Isso está correto?

Se sim, então: -

1. Verifique se o modelo de certificado permite a exportação de chaves privadas.
2.Como você está gerando sua solicitação de certificado, pode usar a seguinte técnica

CREATE INF file da seguinte maneira

[Version]
Signature = "$ Windows NT $

[NewRequest]
Subject =" etc "
KeySpec = 1 Exportável
= 1
MachineKeySet = TRUE
ProviderName =" CSPName "
ProviderType = 1

[RequestAttributes] CertificateTemplate =

NOTE the Exportable = 1
Em seguida, use os comandos de fluxo no prompt de comando

certreq -novo infile.inf reqfile.req // em que infile.inf é o arquivo acima e reqfile é o arquivo de solicitação de saída

certreq -submit -config \ reqfile.req // Envia a solicitação de certificação para a CA.

Quando isso estiver concluído, você irá poder exportar o certificado como pfx

Alternativamente, vá para http://www.blacktipconsulting.com/Site/Products.html onde coloquei minha ferramenta de linha de comando gratuita que faz tudo isso para você e exporta o certificado como pfx depois de concluído


2

Como Helvick apontou, a resposta do PKCS10 é PKCS7 e não contém a chave privada. Portanto, ao gerar o CSR, você deve ter gerado o arquivo privatekey.key. Você pode usar os seguintes comandos. (Eu sei que essa é uma pergunta de quatro anos, mas não consegui fazer isso enquanto seguia a discussão na página).

openssl pkcs7 -inform DER -in PK7BDownloadedArchive.p7b -text -print_certs -out intermediateCert.pem

openssl pkcs12 -export -in intermediateCert.pem -inkey privateKey.key -out FinalPKCS12Cert.p12

Boa sorte!

Atenciosamente, JE


Você pode não precisar do -informargumento.
palswim 12/03

1

Eu posso estar errado, mas acho que o seu arquivo PCKCS # 7 inclui apenas a metade pública do seu certificado.

O arquivo PKCS # 12 precisaria ter as duas metades - por isso, ele precisa da -inkeyopção.

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.