Tuesday, December 04, 2012

Assinar um arquivo jar com jarsigner

Um assinatura digital é uma sequência de bits calculados a partir de algumas informações e de uma chave privada (certificado). Um arquivo "assinado" garante autenticidade, uma garantia a quem for utilizar. Caso o arquivo seja modificado a assinatura passa a não ter valor.

Em alguns casos é necessário assinar arquivos jar (Java ARchive), por exemplo ao distribuir uma aplicação Swing via Java Web Start que utiliza I/O (saiba mais sobre as restrições impostas pela JVM). No kit de desenvolvimento Java (JDK), o jarsigner é o programa responsável por gerar e verificar assinaturas em um arquivo jar.

O jarsigner utiliza informações da chave e certificado digital para gerar a assinatura. Um exemplo:

$ jarsigner -keystore /home/yaw -storepass mykeypass 
  -keypass mykeypass aplicacaoSegura.jar mykey

Detalhes do comando:
  • -keystore: o local (path) da chave;
  • -storepass e -keypass: a senha pra acessar e a senha da chave;
  • aplicaoSegura.jar: o nome do arquivo jar;
  • mykey: o alias da chave;
O jarsigner também é útil para verificar se um arquivo já possui alguma assinatura. Veja:

$ jarsigner -verify aplicacaoSegura.jar

Também é possível assinar um jar pelo ANT, veja um exemplo de target para isso:

<target name="pack-and-sign">
  <echo message="Assinando o jar aplicaoSegura.jar"></echo>

  <signjar alias="mykey" jar="aplicaoSegura.jar" 
    keypass="mykeypass" keystore="/home/yaw" storepass="mykeypass">
  </signjar>
</target>


Na página do jarsigner é possível obter maiores detalhes sobre o programa. Em outro post descrevo como gerar chaves com o keytool, outra ferramenta do JDK.

@edermag

1 comment:

Dhiego Tosatti said...

Bom dia Eder,
em Janeiro a atualização da JVM vai obrigar os Applets e Java web start a serem assinados por um certificado digital verdadeiro, emitido por uma CA válida. Sabe dizer que tipo de certificado, quais arquivos desses certificados são necessários parar realizar essa asssinatura?

Obrigado