É bem simples, usando jdk6 pelo menos ...
bash $ keytool - keystore foo.jks - genkeypair - alias foo \
-dname 'CN = foo.example.com, L = Melbourne, ST = Victoria, C = AU'
Digite a senha do keystore:
Re-introduza a nova palavra-passe:
Digite a senha da chave para
(RETURN se for igual à senha do keystore):
bash $ keytool - keystore foo.jks - exportcert - alias foo | \
openssl x509 -informa der -text
Digite a senha do keystore: asdasd
Certificado:
Dados:
Versão: 3 (0x2)
Número de série: 1237334757 (0x49c03ae5)
Algoritmo de assinatura: dsaWithSHA1
Emissor: C = AU, ST = Victoria, L = Melbourne, CN = foo.example.com
Validade
Antes: 18 de março 00:05:57 2009 GMT
Não Depois: 16 de junho 00:05:57 2009 GMT
Assunto: C = AU, ST = Victoria, L = Melbourne, CN = foo.example.com
Informações da chave pública do assunto:
Algoritmo de chave pública: dsaEncryption
Chave pública do DSA:
bar:
00: e2: 66: 5c: e0: 2e: da: e0: 6b: a6: aa: 97: 64: 59: 14:
7e: a6: 2e: 5a: 45: f9: 2f: b5: 2d: f4: 34: 27: e6: 53: c7:
bash $ keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcstoretype jks \
-deststoretype pkcs12
Digite a senha do keystore de destino:
Re-introduza a nova palavra-passe:
Digite a senha do keystore de origem:
Entrada para o alias foo importada com sucesso.
Comando de importação concluído: 1 entradas importadas com sucesso, 0 entradas falharam ou foram canceladas
bash $ openssl pkcs12 -in foo.p12 -out foo.pem
Digite a Senha de importação:
Verificado por MAC OK
Digite a senha do PEM:
Verificando - digite a frase secreta do PEM:
bash $ openssl x509 -text -in foo.pem
Certificado:
Dados:
Versão: 3 (0x2)
Número de série: 1237334757 (0x49c03ae5)
Algoritmo de assinatura: dsaWithSHA1
Emissor: C = AU, ST = Victoria, L = Melbourne, CN = foo.example.com
Validade
Antes: 18 de março 00:05:57 2009 GMT
Não Depois: 16 de junho 00:05:57 2009 GMT
Assunto: C = AU, ST = Victoria, L = Melbourne, CN = foo.example.com
Informações da chave pública do assunto:
Algoritmo de chave pública: dsaEncryption
Chave pública do DSA:
bar:
00: e2: 66: 5c: e0: 2e: da: e0: 6b: a6: aa: 97: 64: 59: 14:
7e: a6: 2e: 5a: 45: f9: 2f: b5: 2d: f4: 34: 27: e6: 53: c7:
bash $ openssl dsa -text -in foo.pem
leia chave DSA
Digite a senha do PEM:
Chave privada: (1024 bits)
priv:
00: 8f: b1: af: 55: 63: 92: 7c: d2: 0f: e6: f3: a2: f5: ff:
1a: 7a: fe: 8c: 39: dd
bar:
00: e2: 66: 5c: e0: 2e: da: e0: 6b: a6: aa: 97: 64: 59: 14:
7e: a6: 2e: 5a: 45: f9: 2f: b5: 2d: f4: 34: 27: e6: 53: c7:
Você acaba com:
- foo.jks - keystore no formato java.
- foo.p12 - keystore no formato PKCS # 12.
- foo.pem - todas as chaves e certificados do keystore, no formato PEM.
(Este último arquivo pode ser dividido em chaves e certificados, se você quiser.)
Resumo do comando - para criar o keystore JKS:
keytool -keystore foo.jks -genkeypair -alias foo \
-dname 'CN=foo.example.com,L=Melbourne,ST=Victoria,C=AU'
Resumo do comando - para converter o keystore JKS no keystore PKCS # 12 e, em seguida, no arquivo PEM:
keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcstoretype jks \
-deststoretype pkcs12
openssl pkcs12 -in foo.p12 -out foo.pem
se você tiver mais de um certificado em seu keystore JKS e desejar exportar apenas o certificado e a chave associados a um dos aliases, poderá usar a seguinte variação:
keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcalias foo \
-srcstoretype jks \
-deststoretype pkcs12
openssl pkcs12 -in foo.p12 -out foo.pem
Resumo do comando - para comparar o keystore JKS ao arquivo PEM:
keytool -keystore foo.jks -exportcert -alias foo | \
openssl x509 -inform der -text
openssl x509 -text -in foo.pem
openssl dsa -text -in foo.pem
Eu continuava recebendo erros
openssl
ao usar o comando do StoBor:Por alguma razão, apenas esse estilo de comando funcionaria para o meu arquivo JKS
A chave foi definir
destkeypass
, o valor do argumento não importava.fonte
O
keytool
comando não permitirá que você exporte a chave privada de um armazenamento de chaves. Você precisa escrever algum código Java para fazer isso. Abra o armazenamento de chaves, obtenha a chave necessária e salve-a em um arquivo no formato PKCS # 8. Salve o certificado associado também.Use os utilitários OpenSSL para converter esses arquivos (que estão no formato binário) para o formato PEM.
fonte
Conversão direta de arquivo jks para pem usando o keytool
fonte
keytool
ejboss
páginas de documentos sem sucesso. Obrigado!Instruções simplificadas para converter um arquivo JKS para os formatos PEM e KEY (.crt e .key):
fonte
Encontrei uma solução muito interessante:
http://www.swview.org/node/191
Em seguida, dividi o par de chave pública / privada em dois arquivos private.key publi.pem e funciona!
fonte
A conversão de um JKS KeyStore em um único arquivo PEM pode ser facilmente realizada usando o seguinte comando:
Explicação:
keytool -list -rfc -keystore "myKeystore.jks"
lista tudo no KeyStore 'myKeyStore.jks' no formato PEM. No entanto, também imprime informações extras.| sed -e "/-*BEGIN [A-Z]*-*/,/-*END [A-Z]-*/!d"
filtra tudo o que não precisamos. Ficamos com apenas os PEMs de tudo no KeyStore.>> "myKeystore.pem"
escreva os PEMs no arquivo 'myKeyStore.pem'.fonte
sed "s/^\-*BEGIN [A-Z]*\-*$//g;s/^\-*END [A-Z]*\-*$//g"
vez (com o GNU sed), mas eu não tenho certeza se isso é o suficiente se houver mais do que uma cert no seu porta-chavesbash: !d": event not found
: para o bash, um ponto de exclamação é uma tecla curta para usar um comando. Para usar esta resposta você precisa usar apóstrofos no lugar das citações para a opção utilizados como -e para sedkeytool -list -rfc -keystore "myKeystore.jks" | sed -e '/-*BEGIN [A-Z]*-*/,/-*END [A-Z]-*/!d' >> "myKeystore.pem"
Primeiro faça o dump do keystore de JKS para PKCS12
1. keytool -importkeystore -srckeystore ~ / .android / debug.keystore -destkeystore intermediário.p12 -srcstoretype JKS -deststoretype PKCS12
Despejar o novo arquivo pkcs12 no pem
Você deve ter o certificado e a chave privada no formato pem. Divida-os. Coloque a parte entre “BEGIN CERTIFICATE” e “END CERTIFICATE” em cert.x509.pem Coloque a parte entre “BEGIN RSA PRIVATE KEY” e “END RSA PRIVATE KEY” em private.rsa.pem Converta a chave privada no formato pk8 como esperado por signapk
3. openssl pkcs8 -topk8 -outform DER - em private.rsa.pem -inform PEM -out private.pk8 -nocrypt
fonte
Bem, o OpenSSL deve fazê-lo facilmente a partir de um arquivo # 12:
Talvez mais detalhes sobre o que é o erro / falha?
fonte
Caso você não tenha o openssl instalado e esteja procurando uma solução rápida, existe um software chamado portcle que é muito útil e pequeno para fazer o download.
A desvantagem é que não há linha de comando, até onde eu saiba. Mas a partir da GUI, é bastante simples exportar uma chave privada PEM:
Selecione Chave privada e certificados e formato PEM
fonte
Experimente o Keystore Explorer http://keystore-explorer.org/
O KeyStore Explorer é uma substituição da GUI de código aberto para o keytool e jarsigner dos utilitários de linha de comando Java. Ele também abre o openssl / pkcs12.
fonte
primeiro crie o arquivo keystore como
C: \ Arquivos de programas \ Android \ Android Studio \ jre \ bin> keytool -keystore androidkey.jks -genkeypair -alias androidkey
Digite a senha do keystore: Digite
novamente a nova senha:
Qual é o seu nome e sobrenome? Desconhecido: Nome Sobrenome
Qual é o nome da sua unidade organizacional? Desconhecido: desenvolvimento móvel
Qual é o nome da sua organização? Desconhecido: nome da sua empresa
Qual é o nome da sua cidade ou localidade? Qual é o nome do seu estado ou província?
Qual é o código do país com duas letras para esta unidade? Desconhecido: IN // pressione enter
CN = Nome Sobrenome, OU = Desenvolvimento móvel, O = O nome da sua empresa, L = Nome da cidade, ST = Nome do estado, C = IN correto? [não]: sim
Digite a senha da chave para (RETURN se a mesma senha do keystore): pressione enter se desejar a mesma senha
C: \ Arquivos de programas \ Android \ Android Studio \ jre \ bin> keytool -export -rfc -alias androidkey -arquivo android_certificate.pem -keystore androidkey.jks
Digite a senha do keystore:
certificado armazenado no arquivo
fonte
A resposta mais precisa de todas deve ser que isso NÃO é possível.
Um keystore Java é apenas um recurso de armazenamento para chaves e certificados criptográficos , enquanto o PEM é um formato de arquivo apenas para certificados X.509.
fonte