Como assinar midlets com certificados digitais e certificar suas aplicações JME?
Vou 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:

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:

Veja como ficou o nosso KeyStore:

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.ksO 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!

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
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.

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.
30 Outubro 2008, 2:39 pmRicardo N. de Campos:
Para a Verisign gerar o certificado não é necessário enviar um CSR?
12 Janeiro 2009, 6:00 pmFrederico:
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
6 Fevereiro 2009, 4:30 pmSilvé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.
14 Abril 2009, 7:16 pmStavarengo:
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!
28 Maio 2009, 9:16 amvaldir:
Fiz todo o processo, mas errei em uma parte, quando voltei novamente em signing, o mesmo não entrou mais, o que devo fazer?
23 Novembro 2009, 12:14 pm