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?

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top