1.4 Como assinar aplicativos .JAR (JAVA)
AVISO: Antes de iniciar o processo de assinatura, você deverá baixar e instalar o aplicativo SafeNet Authentication Client seguindo as instruções presentes neste link: SAFENET

Após ter instalado o aplicativo SafeNet, basta seguir as instruções a seguir:


1. Como assinar arquivos .jar usando o comando CLI Jarsigner

a) Crie um arquivo chamado eToken.cfg que contenha as seguintes linhas e salve-o na pasta bin do JDK
(por exemplo, C:\Arquivos de Programas (x86)\Java\jdk1.7.0_05\bin).

name=eToken
library=c:\WINDOWS\system32\eTPKCS11.dll

b) No Windows Explorer, navegue até a pasta JDK.

c) Na pasta JDK, pressione e segure Shift, clique com o botão direito do mouse na pasta bin e selecione Abrir janela de comando aqui.


d) Para visualizar o certificado de assinatura de código e o alias do certificado no token:

Conecte seu token e Execute o seguinte comando no prompt de comando:

keytool -list -keystore NONE -storetype PKCS11 -providerclass sun.security.pkcs11.SunPKCS11 -providerArg ./eToken.cfg

Enter keystore password: [Digite a Senha de Seu Token]

Exemplo de saída:

Keystore type: PKCS11
Keystore provider: SunPKCS11-eToken 
Your keystore contains 1 entry NOME DA EMPRESA
PrivateKeyEntry, 
Certificate fingerprint (SHA2): XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX

Neste exemplo, NOME DA EMPRESA é o alias do certificado que você usa para assinar arquivos .jar.

e) Para usar o certificado de assinatura de código no token e assinar o arquivo.jar, execute o seguinte comando no prompt de comando:

jarsigner -tsa http://timestamp.digicert.com -verbose -keystore NONE -storetype PKCS11 -providerClass sun.security.pkcs11.SunPKCS11 -providerArg ./eToken.cfg "C:\caminho\para\arquivo.jar" "NOME DA EMPRESA"

f) Se o comando for executado com sucesso, você deverá ver algo semelhante à seguinte saída:

Enter Passphrase for keystore: 
adding: META-INF/7800FA4C.SF 
requesting a signature timestamp 
TSA location: http://timestamp.digicert.com 
adding: META-INF/7800FA4C.RSA 
signing: DigiCertTest.class 
jar signed.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

POSSIVEIS PROBLEMAS E SOLUÇÕES

O programa faz uma pausa e não solicita que você digite sua senha.
Se depois de executar o comando keytool ou jarsigner, o programa pausar e não solicitar uma senha, desconecte o dispositivo (token) e conecte-o novamente. Execute o comando novamente. Desta vez deve funcionar. 

"erro do jarsigner: java.lang.ClassNotFoundException: sun.security.pkcs11.SunPKCS11
Este erro ocorre ao usar uma versão de 64 bits do JDK. Para eliminar esse erro, baixe e use uma versão de 32 bits do JDK. 

"erro do jarsigner: java.lang.RuntimeException: carregamento do keystore: falha no carregamento
Este erro pode ocorrer, se você digitou a senha errada. 

 "erro de keytool: java.security.KeyStoreException: PKCS11 não encontrado
 Este erro ocorre se o arquivo de configuração não for carregado corretamente ou se o arquivo de configuração apontar para um arquivo que não existe (por exemplo, library=c:\WINDOWS\system32\eTPKCS11.dll). Às vezes, esse erro indica que os drivers de dispositivo do token não estão instalados em seu computador.