quarta-feira, fevereiro 26, 2014

Após assinar applet, continua aparecendo mensagem de PUBLISHER UNKNOWN e expiração em 6 meses

Este post consiste em detalhar meios de contornar o problema da atualização do java update 51 que demanda que todo e qualquer applet seja assinado digitalmente por uma entidade competente.

Um applet sem assinatura e auto assinados exibem Publisher Unknow (editor desconhecido) e passaram a ter sua execução bloqueada a partir da versão 7.51 do JRE.

Para que essa mensagem não seja exibida, é necessário assinar os JARs com um certificado válido emitido pela Certisign.

Porém, após seguir os passos para assinar os JARs, estes continuaram a exibir a mensagem de Publisher Unknow. Além disso, ao serem assinados ou verificados, exibirem um alerta de que a assinatura era válida apenas por 6 meses, enquanto o certificado, recém emitido, era válido por 12 meses.

A documentação da Certsign se mostrou insuficiente e um chamado de suporte nos levou a gerar um arquivo CSR (certificate signing request) inválido, entre outras coisas.

Então vão aí as dicas para tudo dar certo da 1ª vez.

1.       Primeira dica importante: sempre utilize o comando KEYTOOL e JARSIGNER do  JDK 6. Os comandos do JDK 7 produzem arquivos corrompidos, isto está documentado em vários blogs.
2.       Para gerar as chaves públicas e privadas:

keytool -genkey -alias -keyalg RSA -keysize 2048 -keystore.jks

Serão feitas as seguintes perguntas:

Defina a senha de segurança do keystore (será utilizada para futuras alterações neste arquivo)

What is your first and last name? (Este é o Common Name): Ex: Minha Empresa LTDA
What is the name of your organizational unit? (Preenchimento livre - Ex. setor): Tecnologia
What is the name of your organization? (Razão Social completa como consta no CNPJ): Minha Empresa LTDA
What is the name of your City or Locality? (Cidade, por extenso): Ex. Rio de Janeiro
What is the name of your State or Province? (Estado, por extenso): Ex. Rio de Janeiro
What is the two-letter country code for this unit? - (Sigla do País, com duas letras): BR
Confirmar
Defina a Senha do certificado (será utilizada para assinar os JARs)

Segunda dica importante: geração de certificados de servidor, no campo CN deve ser informado o host+domínio. Para certificados Code Signing o correto é a Razão Social da empresa, exatamente igual ao que aparece no cartão CNPJ.

3.       Para gerar o CSR (Certificate Signing Request:

keytool -certreq -alias -keyalg RSA -file .csr -keystore .jks

4.       Guarde estes arquivos, suas senhas e o seu alias em um local seguro. Se perder o JKS ou esquecer a senha do keystore ou do certificado seu certificado não poderá ser usado. Se esquecer o alias use o keytool –list –v –keystore .jks
5.       Envie o CSR para a CertSign
6.       A CertSign vai verificar seu CNPJ na Junta Comercial e vai entrar em contato com você num telefone fixo que deverá estar no nome da empresa. Se você não possuir telefone fixo registrado no nome da empresa e este telefone não estiver cadastrado numa lista pública, a CertSign vai te dar outras alternativas.
7.       Quando tudo estiver certo, você vai receber por email três certifiados

Chave pública do seu certificado: deve ser gravada num arquivo texto com nome .cer
CA intermediário: deve ser gravada num arquivo texto com nome .cer
Seu certificado no formato pkcs7: deve ser gravada num arquivo texto com nome .p7b

Terceira dica importante: você deverá utilizar um arquivo keystore contendo sua chave privada mais toda a árvore de certificados, os certificados deverão ser armazenados na ordem correta (raiz, CA intermediário, seu certificado). Se isto não estiver desta forma, a assinatura irá falhar. Para proceder desta forma, siga os passos:

8.       Tire uma cópia do seu arquivo keystore (.jks) e renomeie para algo como _tree.jks
9.       Dê um duplo clique no arquivo .ptb (no Windows, vai abrir com o gerenciador de certificados)
10.   Expanda a árvore até chegar numa pasta chamadas Certificados, que vai conter 3 certificados em árvore
11.   Clique com o botão da direita no certificado onde está escrito Public Primary Certification Authority – G5, todas as tarefas, export... Grave o certificado no formato DER e extensão .cer na mesma pasta onde gravou os certificados do passo 7. Utilize um nome como primary.cer
12.   Repita o procedimento para o certificado onde está escrito Code Signing 2010 CA, grave com um nome como secondary.cer
13.   Importe estes dois certificados, primeiro o primary e depois o code siginign, no arquivo _tree.jks:

keytool -import -trustcacerts -alias root -file primary.cer -keystore _tree.jks
keytool -import -trustcacerts -alias secondary -file secondary.cer -keystore _tree.jks

14.   Importe o seu certificado no arquivo _tree.jks:

keytool -import -trustcacerts -alias -file .cer -keystore _tree.jks

15.   Assine todos os JARs utilizados no seu applet:


jarsigner" -keystore _tree.jks -storepass -keypass

2 comentários:

Unknown disse...

Estou com dúvidas na assinatura de um jar, acho que não defini bem a cadeia de certificados... Será que me pode ajudar Daniel ?

Anônimo disse...

Tutorial me ajudou bastante, porém tem um pequeno erro que deixa confuso, no item 14 o arquivo a ser importado é o certificado com extensão .p7b, a instrução leva a entender que é um .cer
e li em algum lugar que esse certificado tem que ser importado com o MESMO alias do keystore.jks. fiz dessa forma e deu certo aqui.

só uma dúvida, a chave pública e o CA intermediário que recebemos no email, fica realmente sem uso? porque não usei eles pra nada..