Como converter o arquivo .pfx em keystore com a chave privada?
-
26-09-2019 - |
Pergunta
Eu preciso assinar o aplicativo Android (.apk
).
Eu tenho .pfx
Arquivo. Eu converti para .cer
arquivo via Internet Explorer e depois convertido .cer
para .keystore
usando o keytool. Então eu tentei assinar .apk
Com Jarsigner, mas diz que .Keystore não contente uma chave privada.
O que estou fazendo de errado?
Solução
Usando o JDK 1.6 ou mais tarde
Foi apontado por Justin nos comentários abaixo que o KeyTool sozinho é capaz de fazer isso usando o seguinte comando (embora apenas no JDK 1.6 e posterior):
keytool -importkeystore -srckeystore mypfxfile.pfx -srcstoretype pkcs12
-destkeystore clientcert.jks -deststoretype JKS
Usando o JDK 1.5 ou abaixo
OpenSSL pode fazer tudo. Esta resposta em Jguru é o melhor método que encontrei até agora.
Em primeiro lugar, verifique se você tem OpenSSL instalado. Muitos sistemas operacionais já o instalaram como encontrei com o Mac OS X.
Os dois comandos a seguir convertem o arquivo PFX em um formato que pode ser aberto como uma loja de chave Java PKCS12:
openssl pkcs12 -in mypfxfile.pfx -out mypemfile.pem
openssl pkcs12 -export -in mypemfile.pem -out mykeystore.p12 -name "MyCert"
Observe que o nome fornecido no segundo comando é o alias da sua chave na nova loja de chaves.
Você pode verificar o conteúdo da loja de chaves usando o utilitário Java Keytool com o seguinte comando:
keytool -v -list -keystore mykeystore.p12 -storetype pkcs12
Por fim, se você precisar, pode convertê -lo em uma loja de chaves da JKS, importando o Key Store criado acima em uma nova loja de chaves:
keytool -importkeystore -srckeystore mykeystore.p12 -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS
Outras dicas
O Jarsigner pode usar seu arquivo PFX como o keystore para assinar seu frasco. Certifique -se de que seu arquivo PFX tenha a chave privada e a cadeia de certificados ao exportar. Não há necessidade de converter para outros formatos. O truque é obter o Alias do seu arquivo PFX:
keytool -list -storetype pkcs12 -keystore your_pfx_file -v | grep Alias
Depois de ter seu alias, a assinatura é fácil
jarsigner.exe -storetype pkcs12 -keystore pfx_file jar_file "your alias"
Os dois comandos acima solicitarão a senha que você especificou na exportação PFX. Se você quiser que sua senha fique em texto claro, use o -Storepass Mudar antes do -Keystore trocar
Uma vez assinado, admire seu trabalho:
jarsigner.exe -verify -verbose -certs yourjarfile
eu encontrei isto Página que informa como importar um PFX para JKS (Java Key Store):
keytool -importkeystore -srckeystore PFX_P12_FILE_NAME -srcstoretype pkcs12 -srcstorepass PFX_P12_FILE -srcalias SOURCE_ALIAS -destkeystore KEYSTORE_FILE -deststoretype jks -deststorepass PASSWORD -destalias ALIAS_NAME
Seu arquivo PFX deve conter a chave privada dentro dele. Export a chave privada e o certificado diretamente do seu arquivo PFX (por exemplo, usando o OpenSSL) e importe -os para o seu keystore Java.
Editar
Outras informações:
- Download OpenSSL para Windows aqui.
- Chave privada de exportação:
openssl pkcs12 -in filename.pfx -nocerts -out key.pem
- Certificado de exportação:
openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
- Importar chave privada e certificado para Java Keystore usando
keytool
.
Justin (acima) é preciso. No entanto, lembre -se de que, dependendo de quem você obtém o certificado (CA intermediária, CA root envolvido ou não) ou de como o PFX é criado/exportado, às vezes eles podem estar perdendo a cadeia de certificados. Após a importação, você teria um certificado do tipo PrivateKeyEntry, mas com uma cadeia de comprimento de 1.
Para corrigir isso, existem várias opções. A opção mais fácil em minha mente é importar e exportar o arquivo PFX no IE (escolhendo a opção de incluir todos os certificados na cadeia). O processo de importação e exportação de certificados no IE deve ser muito fácil e bem documentado em outros lugares.
Depois de exportado, importe o keystore como Justin apontou acima. Agora, você teria uma parte de chave com certificado de tipo PrivateKeyentry e com um comprimento da cadeia de certificados de mais de 1.
Certos clientes de serviço da Web baseados no .NET Erro (não pode estabelecer um relacionamento de confiança), se você não fizer o acima.
Se você trabalha com o JDK 1.5 ou abaixo do utilitário Keytool não terá o -importkeystore
opção (veja Documentação do Keytool JDK 1.5) e a solução por Miked estará disponível apenas transferindo o .pfx
em uma máquina com um JDK mais recente (1,6 ou superior).
Outra opção no JDK 1.5 ou abaixo (se você tiver o Oracle WebLogic Product), é seguir as instruções deste documento Oracle: Usando formatos de certificado PFX e PEM com Keystores. Descreve a conversão em .pem
formato, como extrair informações de certificados deste formato textual, e importá -las para .jks
formato com java utils.ImportPrivateKey
utilidade (este é um utilitário incluído no produto WebLogic).