Jar Signer
Informações Gerais
Este guia de uso integrado com o utilitário jarsigner
do SDK Java foi preparado usando as versões de software e firmware abaixo:
- SO Windows 11 (inglês)
- SO Linux Debian 11
- JDK: 8 e 17
- Firmware do HSM: 5.4.0.0 (ou superior)
- Cliente do HSM: 4.14.0.0 (ou superior)
Requisitos
- Conectividade com o HSM (porta TCP 4433);
- Serviço do HSM iniciado;
- Chave e certificado/cadeia de certificados no HSM;
- Credenciais da partição do HSM onde será criada ou utilizada a chave privada.
Instalação Chaves e Certificados
Aviso
Nos passos de importação a seguir os nomes para chave, certificado e cadeia no HSM devem seguir as regras de nomenclatura definidas no tópico Implementação. Por exemplo key
, key_cert
e key_chain
.
-
Importar ou gerar a chave na partição escolhida.
-
Importar o certificado e opcionalmente a cadeia PKCS#7 da Autoridade Certificadora (AC) que emitiu o certificado para a partição escolhida.
Assinatura de Código
A assinatura com jarsigner
usando o HSM é feita via a API de integração JCA/JCE. Portanto o passo inicial é configurar a API de integração para conexão com o HSM. Para mais detalhes sobre a API JCA/JCE do HSM consulte o tópico JCA/JCE.
-
Instalar o pacote Java DINAMO. Seguir o guia de Instalação manual.
-
Execute o comando
jarsigner
com os parâmetros a seguir.jarsigner -J-D"dinamo.hsm.jca.ip=<HSM_IP>" -J-D"dinamo.hsm.jca.user=<HSM_USER>" -J-D"dinamo.hsm.jca.pwd=<HSM_PWD>" -tsa http://timestamp.digicert.com -providerName ND -storetype TAC -providerClass br.com.trueaccess.provider.netdfence.ND -keystore NONE -storepass <HSM_PWD> "<JAR_APPLICATION>" <KEY>
jarsigner -J-cp -J"<DINAMO_JAVA_PACKAGE>" -J-D"dinamo.hsm.jca.ip=<HSM_IP>" -J-D"dinamo.hsm.jca.user=<HSM_USER>" -J-D"dinamo.hsm.jca.pwd=<HSM_PASSWORD>" -tsa http://timestamp.digicert.com -providerName ND -storetype TAC -providerClass br.com.trueaccess.provider.netdfence.ND -keystore NONE -storepass <HSM_PASSWORD> "<JAR_APPLICATION>" <KEY>
Onde:
<DINAMO_JAVA_PACKAGE>
: path do pacote Java DINAMO;<HSM_IP>
: enderço do HSM;<HSM_USER>
: nome do usuário/partição;<HSM_PASSWORD>
: senha da usuário/partição;<JAR_APPLICATION>
: aplicação Java (.jar) que terá o código assinado;<KEY>
: é o nome da chave privada que foi gerada ou importada no HSM.
A assinatura de uma ACT (Autoridade de Carimbo de Tempo), com adição de timestamp é opcional (parâmetro
-tsa
).
Verificação
-
A verificação de um arquivo .jar assinado também é feita com o programa
jarsigner
:jarsigner -verify -verbose app.jar s 1782 Wed Aug 31 18:04:42 UTC 2022 META-INF/MANIFEST.MF 1876 Wed Aug 31 18:04:42 UTC 2022 META-INF/KEY.SF 12143 Wed Aug 31 18:04:42 UTC 2022 META-INF/KEY.RSA 0 Tue Aug 30 21:50:40 UTC 2022 META-INF/ 0 Tue Aug 30 21:50:40 UTC 2022 br/ 0 Tue Aug 30 21:50:40 UTC 2022 br/com/ 0 Tue Aug 30 21:50:40 UTC 2022 br/com/trueaccess/ 0 Tue Aug 30 21:50:40 UTC 2022 com/ 0 Tue Aug 30 21:50:40 UTC 2022 com/dinamonetworks/ sm 170 Tue Aug 30 21:50:40 UTC 2022 br/com/trueaccess/NetDFence.class sm 2265 Tue Aug 30 21:50:40 UTC 2022 br/com/trueaccess/TacAccessToken.class sm 1252 Tue Aug 30 21:50:40 UTC 2022 br/com/trueaccess/TacException.class sm 60370 Tue Aug 30 21:50:40 UTC 2022 br/com/trueaccess/TacNDJavaLib.class sm 2360 Tue Aug 30 21:50:40 UTC 2022 br/com/trueaccess/TacSPBException.class sm 34425 Tue Aug 30 21:50:40 UTC 2022 com/dinamonetworks/Dinamo.class sm 718 Tue Aug 30 21:50:40 UTC 2022 com/dinamonetworks/HSMAllInfo.class sm 631 Tue Aug 30 21:50:40 UTC 2022 com/dinamonetworks/HSMCounterInfo.class sm 413 Tue Aug 30 21:50:40 UTC 2022 com/dinamonetworks/HSMDiskInfo.class sm 490 Tue Aug 30 21:50:40 UTC 2022 com/dinamonetworks/HSMStatInfo.class sm 576 Tue Aug 30 21:50:40 UTC 2022 com/dinamonetworks/JwsComponents.class sm 2006 Tue Aug 30 21:50:40 UTC 2022 com/dinamonetworks/PIXHTTPReqDetails.class sm 401 Tue Aug 30 21:50:40 UTC 2022 com/dinamonetworks/PIXResponse.class sm 1073 Tue Aug 30 21:50:40 UTC 2022 com/dinamonetworks/SVaultGenTokenInfo.class sm 514 Tue Aug 30 21:50:40 UTC 2022 com/dinamonetworks/SVaultGenTokenResponse.class s = signature was verified m = entry is listed in manifest k = at least one certificate was found in keystore i = at least one certificate was found in identity scope - Signed by "CN=Dinamo Networks, O=Dinamo Networks, ST=Distrito Federal, C=BR" Digest algorithm: SHA-256 Signature algorithm: SHA256withRSA, 3072-bit key Timestamped by "CN=DigiCert Timestamp 2022 - 2, O="DigiCert, Inc.", C=US" on Wed Aug 31 18:04:42 UTC 2022 Timestamp digest algorithm: SHA-256 Timestamp signature algorithm: SHA256withRSA, 4096-bit key jar verified. The signer certificate will expire on 2023-03-14. The timestamp will expire on 2031-11-09.