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 10 (inglês)
- SO Linux Debian 11
- JDK: 8
- Firmware do HSM: 5.0.26.0 (ou superior)
- Cliente do HSM: 4.7.30 (ou superior)
Requisitos
- Conectividade com o HSM (porta TCP 4433).
- Software client do HSM instalado, (consulte o tópico Instalação).
- Serviço do HSM iniciado.
- Credenciais da partição do HSM onde será criada ou utilizada a chave privada.
Assinatura de Código
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
.
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.
-
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.
-
Gerar o arquivo de configuração da JCA usando o programa java
jcaconfig.jar
. Este programa é instalado junto com o software cliente do HSM. Para mais detalhes sobre o utilitário consulte o tópico Configuração. A localização default dos programas e bibliotecas Java do HSM é conforme abaixo.- Windows:
C:\Program Files\Dinamo Networks\HSM Dinamo\sdk\java
- Linux:
/opt/dinamo
O nome do arquivo de configuração gerado deve ser
Configuration.ND
.java -jar jca_config.jar -addr <HSM_IP> -usr <HSM_PARTITION> -pwd <HSM_PARTITION_PASSWORD> -file Configuration.ND
Onde -
<HSM_IP>
: endereço IP do HSM -<HSM_PARTITION>
: partição do HSM -<HSM_PARTITION_PASSWORD>
: senha da partição - Windows:
-
Copiar o arquivo de configuração gerado para a mesma pasta onde executará o comando
jarsigner
. -
Copiar os arquivos
ndjca.jar
etacndjavalib.jar
para a pasta de extensões do Java. Normalmente esta pasta tem o caminho abaixo, onde<VERSION>
é a versão do JDK instalado.- Windows:
C:\Program Files\Java\jdk<VERSION>\jre\lib\ext
- Linux:
/usr/local/openjdk-<VERSION>/jre/lib/ext/
- Windows:
-
Execute o comando
jarsigner
com os parâmetros a seguir.jarsigner -tsa http://timestamp.digicert.com -providerName ND -storetype TAC -providerClass br.com.trueaccess.provider.netdfence.ND -keystore /dev/null -storepass <HSM_PARTITION_PASSWORD> <JAR_APPLICATION> key`
Onde -
<HSM_PARTITION_PASSWORD>
: senha da 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.