É 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