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

  1. Conectividade com o HSM (porta TCP 4433).

  2. Software client do HSM instalado, (consulte o tópico Instalação).

  3. Serviço do HSM iniciado.

  4. Credenciais da partição do HSM onde será criada ou utilizada a chave privada.

Assinatura de código Java usando o HSM

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.

  1. Importar ou gerar a chave na partição escolhida.

  2. Importar o certificado e opcionalmente a cadeia PKCS#7 da Autoridade Certificadora (AC) que emitiu o certificado para a partição escolhida.

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

  4. Copiar o arquivo de configuração gerado para a mesma pasta onde executará o comando jarsigner.

  5. Copiar os arquivos ndjca.jar e tacndjavalib.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/

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

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

Last updated