Preciso assinar o aplicativo Android ( .apk
).
Eu tenho .pfx
arquivo. Eu o converti em .cer
arquivo através do Internet Explorer e depois converti .cer
para .keystore
usar o keytool. Então eu tentei assinar.apk
com o jarsigner, mas ele diz que .keystore não contém uma chave privada.
O que estou fazendo de errado?
Respostas:
Usando JDK 1.6 ou posterior
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):
Usando JDK 1.5 ou inferior
OpenSSL pode fazer tudo. Esta resposta no JGuru é o melhor método que encontrei até agora.
Em primeiro lugar, certifique-se de que você tem OpenSSL instalado. Muitos sistemas operacionais já o têm instalado, como descobri no Mac OS X.
Os dois comandos a seguir convertem o arquivo pfx em um formato que pode ser aberto como um armazenamento de chaves Java PKCS12:
NOTE que o nome fornecido no segundo comando é o apelido da sua chave no novo armazenamento de chaves.
Você pode verificar o conteúdo do armazenamento de chaves usando o utilitário Java keytool com o seguinte comando:
Finalmente, se necessário, você pode convertê-lo em um armazenamento de chaves JKS, importando o armazenamento de chaves criado acima para um novo armazenamento de chaves:
fonte
jarsigner pode usar seu arquivo pfx como o armazenamento de chaves para assinar seu jar. Certifique-se de que seu arquivo pfx tenha a chave privada e a cadeia de certificados ao exportá-lo. Não há necessidade de converter para outros formatos. O truque é obter o alias do seu arquivo pfx:
Depois de ter seu alias, é fácil assinar
Os dois comandos acima solicitarão a senha que você especificou em pfx export. Se você quiser que sua senha seja exibida em texto não criptografado, use a opção -storepass antes da opção -keystore
Depois de assinado, admire seu trabalho:
fonte
Encontrei esta página que ensina como importar um PFX para JKS (Java Key Store):
fonte
Seu arquivo PFX deve conter a chave privada dentro dele. Exporte a chave privada e o certificado diretamente de seu arquivo PFX (por exemplo, usando OpenSSL) e importe-os para seu armazenamento de chaves Java.
Editar
Outras informações:
openssl pkcs12 -in filename.pfx -nocerts -out key.pem
openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
keytool
.fonte
Justin (acima) está correto. No entanto, tenha em mente que dependendo de quem você obteve o certificado (CA intermediário, CA raiz envolvido ou não) ou como o pfx é criado / exportado, às vezes eles podem não ter a cadeia de certificados. Após a importação, você teria um certificado do tipo PrivateKeyEntry, mas com uma cadeia de comprimento 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 outro lugar.
Uma vez exportado, importe o keystore como Justin apontou acima. Agora, você teria um armazenamento de chaves com certificado do tipo PrivateKeyEntry e com um comprimento de cadeia de certificado de mais de 1.
Certos clientes de serviços da Web baseados em .Net apresentam erro (não é possível estabelecer uma relação de confiança), se você não fizer o acima.
fonte
Se você trabalhar com o JDK 1.5 ou inferior, o utilitário keytool não terá a
-importkeystore
opção (consulte a documentação do keytool do JDK 1.5 ) e a solução do 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 inferior (se você tiver o produto Oracle WebLogic) é seguir as instruções deste documento Oracle: Usando formatos de certificado PFX e PEM com keystores . Ele descreve a conversão para o
.pem
formato, como extrair informações de certificados desse formato textual e importá-las para o.jks
formato com ojava utils.ImportPrivateKey
utilitário (este é um utilitário incluído no produto WebLogic).fonte