Como assinar midlets com certificados digitais e certificar suas aplicações JME?

motorola_verisign.jpgVou ensinar a assinar aplicações JME usando o NetBeans 6. Com uma aplicação certificada por algum órgão, como a VeriSign, sua aplicação pode ter acesso liberado à muitas funções do device, sem que o ele peça autorização ao usuário para executar tais funções. Por exemplo, se você inicia uma conexão à web por meio da sua aplicação JME, se a aplicação não é assinada, é perguntado ao usuário se ele deseja permitir que a aplicação se conecte à web. Se sua aplicação for assinada, o acesso é feito sem que o usuário autorize.

Primeiro você precisa adquirir o certificado. Depois que você já comprou o certificado da VeriSign, que tem validade de um ano, por exemplo, ela lhe enviará o certificado por e-mail. Será um e-mail como segue:

Título: VeriSign Java Object Signing (Class 3) Digital ID Order Confirmation
Mensagem:

Dear VeriSign Customer,

Congratulations! Verisign has issued your Java Object Signing (Class 3)

Digital ID.  VeriSign has digitally signed your

Digital ID which gives you assurance that your

Digital ID has not been damaged or changed in any way during its transmission to you.

E no final do corpo do e-mail, vem o certificado, como mostra abaixo (o certificado abaixo é inválido, é apenas um exemplo):
—–BEGIN CERTIFICATE—–

3bUBINH5pRjnwO5RcDfhtgVIUkhvOOrD6Gx7RIS7AgMBAAGjggGgMIIBnDASBgNV

HRMBAf8ECDAGAQH/AgEAMEQGA1UdIAQ9MDswOQYLYIZIAYb4RQEHFwMwKjAoBggr

BgEFBQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTAxBgNVHR8EKjAo

MCagJKAihiBodHRwOi8vY3JsLnZlcmlzaWduLmNvbS9wY2EzLmNybDAdBgNVHSUE

—–END CERTIFICATE—–

E agora? O que fazer com esse certificado? Como usar esse certificado para assinar sua aplicação? A resposta segue abaixo.

Como Funciona

Vou explicar brevemente como funciona todo o processo. Você precisa criar primeiramente o KeyStore, que terá uma senha. O KeyStore é um arquivo que guardará tudo a respeito dos seus certificados e suas chaves. Dentro desse KeyStore, você precisará criar uma Key, e essa Key é que estará relacionada ao seu certificado. Quando você cria a Key deve ser informados vários dados a respeito da sua empresa, de acordo como foi informado para comprar o certificado com a VeriSign. Essa Key terá um Alias, ou um CodNome, que será usado para se referenciar a ela durante o processo de assinatura, e terá uma senha.

Depois de ter o seu KeyStore e sua Key, você precisará importar o certificado que foi enviado por e-mail, para dentro da Key. Isso será feito por um comando feito com o Prompt do MS-DOS no Windows, ou o terminal correspondente no Linux.

Feita a importação do certificado, basta ligar o KeyStore à sua aplicação, usando o netBeans, e pronto! Sua aplicação já estará assinada.

É improtante lembrar que o KeyStore é independente de sua aplicação. Você poderá usá-lo em todas as outras aplicações que quiser assinar. Feito todo o processo acima, bastará você sempre ligar o KeyStore à aplicação que deseja assinar.

Criando o KeyStore e uma Key

Esse processo ainda não é o de assinatura. Ele descreve apenas como criar o arquivo que será usado para efetuar a assinatura em várias aplicações JME.

No NetBeans, clique com botão direito no seu projeto, e escolha Properties. Clique na opção Signing. Clique no botão “Open Keystores Manager”. Clique em Add Keystore, para criarmos uma nova KeyStore. Ele perguntará se você deseja usar uma que você já tenha, ou se deseja criar uma nova com os dados de sua empresa. Vamos criar uma nova, então ative a opção “Create a New Keysore”. Dê um nome à KeyStore, por exemplo, “keystore_devmobile.ks” e escolha o local onde sua KeyStore será gravada, como a sua pasta Meus Documentos, por exemplo. Informe uma senha para a KeyStore e repita-a. Por exemplo, a minha senha vou colocar “keystore18″. Vá anotando tudo, pois sempre precisará dessas informações. Depois clique em Ok, para voltar à tela anterior das KeyStores. Veja a imagem de exemplo:

key01.png

Clique na sua KeyStore “keystore_devmobile.ks”. Na tela ao lado são exibidas as Keys que nossa keystore possui, ou seja, nenhuma por enquanto. Vamos criar então uma nova Key com os dados da sua empresa que você usou para comprar o certificado na Verisign? Clique em New e preencha os dados. Vou mostrar o exemplo abaixo, como ficaria preenchido caso a empresa fosse o DevMobile. O Alias da minha Key será “key_verisign_devmobile”, e a senha será “senhakey18″.

Explicação dos campos:

- Key Painr Alias: É o nome que você deseja dar à sua Key. Por exemplo: chave_verisign_2008, ou devmobile_2008, etc.

- Common Name - Nome comum da pessoa que fez a assinatura. Por exemplo: “Nelson Pereira”, ou “João da Silva”. Coloque apenas 2 nomes, não precisa ser colocado mais que isso.

- Organization Unit - É o nome do departamento ou divisão que fez o certificado. Por exemplo: “Infraestrutura”, “TI”, ou “Vendas”.

- Organization Name - Nome da empresa. Por exemplo: “DevMobile Ltda.”

- Locality Name - Nome da cidade da empresa onde trabalha a pessoa que comprou o certificado. Exemplo: “Itajaí”, ou “Belo Horizonte”.

- State Name - Estado onde fica a cidade. Exemplo: “Santa Catarina”, ou “Minas Gerais”.

- Country - Duas letras referente ao país da empresa. Se é o Brasil, use BR.

- Password - É a senha da sua chave, diferente da chave da KeyStore. Por exemplo: keyverysign18

Segue imagem do preenchimento no NetBeans:

key02.png

Veja como ficou o nosso KeyStore:

key03.png

Confirme todas as telas da Key e do KeyStore, e saia das propriedades do projeto, pois agora alteraremos nossa KeyStore externamente ao NetBeans.

Importar o Certificado para o KeyStore

Depois de criado o keyStore e a nossa Key, é hora de fazermos a importação para a nossa Key, do certificado que foi enviado para o seu e-mail pela VeriSign.

Para isso, primeiro vamos gravar num arquivo simples, TXT, com o certificado. Abra o bloco de notas do Windows, e abra o e-mail enviado pela VeriSign. Copie apenas o conteúdo do e-mail que contém o certificado, incluindo o —-BEGIN… e o —–END. Cole no bloco de notas. Veja como deve ficar o conteúdo no bloco de notas:

—–BEGIN CERTIFICATE—–
3bUBINH5pRjnwO5RcDfhtgVIUkhvOOrD6Gx7RIS7AgMBAAGjggGgMIIBnDASBgNV
HRMBAf8ECDAGAQH/AgEAMEQGA1UdIAQ9MDswOQYLYIZIAYb4RQEHFwMwKjAoBggr
BgEFBQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTAxBgNVHR8EKjAo
MCagJKAihiBodHRwOi8vY3JsLnZlcmlzaWduLmNvbS9wY2EzLmNybDAdBgNVHSUE
—–END CERTIFICATE—–

Grave esse conteúdo do certificado, no bloco de notas, na mesma pasta que gravou o KeyStore, num arquivo com extensão (.pem). Por exemplo, você pdoe chamar o arquivo de certificado.pem. Lembre-se que ao salvar no bloco de notas, na janela de salvar, você deve escolher “Salvar como tipo” a opção “Todos os Arquivos (*.*)”, caso contrário o Bloco de Notas gravará o seu arquivo com o nome “Certificado.pem.txt”, o que não deve acontecer. O Nome do arquivo final deve ser algo como Certificado.pem, sem o .txt.

O meu arquivo KeyStore.ks está nesse caminho:
C:\Users\Junior\keystore_devmobile.ks

O meu certificado.pem deve ser gravado na mesma pasta:
C:\Users\Junior\certificado.pem

Agora que gravamos o nosso arquivo certificado.pem, vamos entrar no prompt de comando e digitar o comando que faz a importação do certificado.pem para o nosso KeyStore. Vá no menu Iniciar, Todos os Programas, Acessórios, Prompt de Comando.

Entre na pasta onde se encontra o arquivo de certificado e o arquivo de keystore. Para isso você precisa digitar o comando CD, que no meu caso seria:

CD “C:\Users\Junior\”

Para importar o certificado para o keystore, usaremos o programa “keytool.exe” que está na pasta BIN do JDK. Você precisará procurar o caminho completo onde se encontra a instalação de seu JDK para dar o comando. No meu caso, seria o seguinte comando:

Modelo: 
“{CaminhoJDK}\bin\keytool.exe” -import -keystore {nome_key_store} 
-storepass {senha_key_store} -alias {nome_alias_key} -file {nome_arquivo_certificado.pem}

Exemplo:
“C:\Program Files\Java\jdk1.6.0_03\bin\keytool.exe” -import -keystore keystore_devmobile.ks 
-storepass keystore18 -alias key_verisign_devmobile -file certificado.pem

Com esse comando, o programa KeyTool fará a importação do certificado para a Key. Nesse estágio você possui um KeyStore com uma Key certificada, autorizada para assinar qualquer aplicação JME. Agora basta que você entre nas propriedades das aplicações que deseja assinar, e indique que a assinatura usará essa KeyStore.

Assinando a Aplicação JME no NetBeans

Para assinar sua aplicação JME, abra-a no NetBeans. Clique com o botão direito no projeto, e escolha Properties. Clique na opção Signing. Ative a opção Sign Distribution. Escolha a sua KeyStore e sua Key assinadas nos passos anteriores. Clique em OK e pronto! Basta fazer um novo Deploy da aplicação e ela já estará assinada!

key04.png

Erros que podem ocorrer

- Ao instalar a aplicação no celular, caso ocorra o erro de certificado inválido, verifique a data do celular. Certifique-se de deixar a data e a hora exatamente atualizadas. Lembre-se que você pode se confundir com o formato de datas. Você pode ver a data 05/07/2008, e pensar que o celular está configurado para o dia 05 de julho de 2008, quando na verdade pode estar dia 07 de maior de 2008, pois o formato da data é diferente MMDDAAAA. Certifique-se de manter a data e o formato de datas corretos.

- Se alguém tiver mais possíveis causas de erros e desejar que eu cite aqui, basta colocar como comentário.

É isso aí. Espero poder ajudar àqueles que precisarem assinar suas aplicações.

Abraço.



Sobre o Autor

Este artigo foi escrito por Nelson Pereira Junior.
Nelson é desenvolvedor há 12 anos. Hoje desenvolve aplicações Web e Móveis na Abacomm Brasil cuidando do desenvolvimento server-side J2EE, banco de dados, design de aplicações móveis, e desenvolvimento móvel usando várias plataformas como BlackBerry, J2ME, FlashLite, Android, etc. Para conversar com o autor use o e-mail, MSN e GTalk npereirajr@gmail.com.



Receba artigos em seu e-mail

Receba os novos artigos do blog em seu e-mail. E-Mail:



6 Comentários

  1. frederico:

    Cara, qual o link para comprar este certificado no VeriSign? Por acaso seria esse:

    https://securitycenter.verisign.com/celp/enroll/retail;jsessionid=JJ5Rwat1f1RDak5FUfHQV2NTUGiZ4S1IJHAW02Z9U24MjQx1X8k0!-114408874

    Aguardo contato.

  2. Ricardo N. de Campos:

    Para a Verisign gerar o certificado não é necessário enviar um CSR?

  3. Frederico:

    Sim, é necessário.

    Basta digitar o comando no prompt do dos ou shell do linux…

    keytool -genkey -keyalg rsa -alias nome_do_certificado

    e depois

    keytool -certreq -alias nome_do_certificado

    para visualizar o csr

  4. Silvério:

    Fiz esse processo e assinei uma aplicação minha com o netbeans. Mas ao instalar ele pede para acessar a interne para validar o arquivo. Nesse caso é isso mesmo que ocorre? Dependente o celular que não tem acesso a net, como seria a validação.

  5. Stavarengo:

    Ola, Nelson…

    Vc cita o orgao VeriSign para criar certificados, porem ele cobra certo?

    Eu gostaria de fazer um certificado gratuito apenas para testes. Como faço isto?

    Obrigado!

  6. valdir:

    Fiz todo o processo, mas errei em uma parte, quando voltei novamente em signing, o mesmo não entrou mais, o que devo fazer?

Deixe um comentário

blogarama.com Globe of Blogs EatonWeb Blog Directory