Comandi Jarsigner

Quando si utilizzano i comandi Jarsigner in questo argomento, assicurarsi di utilizzare i flag dei comandi descritti in Prerequisiti per Keytool e Jarsigner.

Firma di un file Jar con una chiave

Questa operazione firma un file JAR con una chiave. Il comando viene eseguito utilizzando jarsigner con JCE.

Per firmare un file JAR con una chiave memorizzata nell'HSM

Sintassi dei comandi:

jarsigner \
  -J-cp -J<dedicated_kms_jce_jar_path> \
  -J-Djava.security.properties=<java_security_override_file>
  -keystore <local-keystore-name>.dkms -storepass <example-password> -storetype DKKS -keypass <example-password> \
  -signedjar <signed-jar-name> \
  -digestalg <digest-algorithm> -sigalg <signature-algorithm> -certs <jar-to-be-signed>
                        <hsm-key-alias>
                    

Se si riceve un messaggio di avvertenza con la dicitura "The signer's certificate chain is invalid. Reason: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targeThe signer's certificate chain is invalid", nel keystore locale manca un certificato firmato.

È possibile risolvere un errore della catena di certificati con le seguenti operazioni:

  1. Utilizzare il programma keytool per generare un CSR corrispondente alla chiave sull'HSM.

    keytool \
    -J-cp -J<dedicated_kms_jce_jar_path> \
    -certreq \
    -alias <example-alias> \
    -file <CSR-stored-file>.csr \
    -keyalg <key-algorithm> -keysize <key-size> -sigalg <signature-algorithm> \
    -dname <example-distinguished-name> \
    -keypass <example-password> -keystore <keystore-name> -storepass <example-password> -storetype DKKS \
    

    Tenere presente quanto riportato di seguito.

    • -certreq viene utilizzato per generare una richiesta di firma certificato.
    • -alias indica l'alias per la chiave specificata. Se si specifica questo alias, se la chiave non esiste nel keystore, il keystore DKKS cerca nell'HSM un'etichetta corrispondente a questo alias.
    • -keyalg rsa -keysize 4096 specifica l'algoritmo e la dimensione della chiave per la coppia di chiavi
    • -sigalg sha512withrsa -dname fornisce i dettagli per l'addetto al servizio clienti
  2. Utilizzare openssl per creare un nuovo certificato locale con firma automatica X.509 (file .crt) e una chiave privata RSA (file .pem).

    
    openssl req -x509 -newkey rsa:4096 -sha512 -nodes \
    -out <local-ca-crt>.crt \
    -outform pem -keyout <local-ca-pem>.pem \
    -subj /C=US/ST=CA/L=SanJose/O=ExampleCA/OU=Signing/CN=exampleca.com
  3. Inserire il certificato del proprietario CA nel keystore.

    keytool \
    -J-cp -J<dedicated_kms_jce_jar_path> \
    -importcert -noprompt \
    -alias <local-ca-cert-alias> \
    -file <local-ca-crt>.crt \
    -keypass <example-password> -keystore <keystore-name>.dkms -storepass <example-password> -storetype DKKS \
    

    Tenere presente quanto riportato di seguito

    • -importcert viene utilizzato per importare un certificato
    • -noprompt indica al programma di non utilizzare i prompt
    • -alias specifica l'alias che verrà assegnato al certificato CA
    • -file è il file per il certificato
    • -keypass imposta una password per la chiave
  4. Elencare il certificato per assicurarsi che il certificato ca locale si trovi nel keystore:

    keytool \
    -J-cp -J<dedicated_kms_jce_jar_path> \
    -list \
    -alias <local-ca-cert-alias> \
    -keypass <example-password> -keystore <keystore-name> -storepass <example-password> -storetype DKKS \
    

    Il comando restituisce un output simile al seguente:

    Your keystore contains 1 entry
  5. Utilizzando openssl, creare un certificato X.509 con la CSR generata e il Crt locale. Quindi impostare il numero di serie per il nuovo certificato:

    openssl x509 -req -days 365 \
    -in <CSR-stored-file>.csr \
    -CA <local-ca-crt>.crt \
    -CAkey <local-ca-pem>.pem \
    -set_serial <example-serial-number> \
    
    -out <output-crt>.crt
  6. Utilizzando keytool, importare il file <output-crt>.crt nel keystore:

    keytool \
    -J-cp -J<dedicated_kms_jce_jar_path> \
    -importcert -noprompt \
    -alias <output-crt-alias> \
    -file <output-crt>.crt \
    -keypass <example-password> -keystore <keystore-name> -storepass <example-password> -storetype DKKS \
  7. Verificare che il certificato sia stato importato correttamente:

    keytool \
    -J-cp -J<dedicated_kms_jce_jar_path> \
    -list \
    -alias <output-crt-alias> \
    -keypass <example-password> -keystore <keystore-name> -storepass <example-password> -storetype DKKS \

    Il programma restituisce un output simile al seguente:

    Your keystore contains 1 entry
Suggerimento

La firma di un file jar con una nuova chiave garantisce che l'operazione di firma non produca un errore della catena di certificati, poiché il certificato della nuova chiave viene aggiunto al keystore locale durante la creazione. Attenersi alle istruzioni riportate in Genera coppia di chiavi per creare una nuova chiave con lo strumento di gestione dei tasti.

Verifica dei dettagli di firma del file JAR

Utilizzare il flag -verify per verificare i dettagli di firma di un file JAR firmato, inclusa la chiave utilizzata per firmare il file. Il comando viene eseguito utilizzando jarsigner con JCE.

Per verificare il file JAR firmato con la chiave

Sintassi dei comandi:

jarsigner \
  -J-cp -J<dedicated_kms_jce_jar_path> \
  -verify \
  -keystore <local_keystore><local-keystore-name>.dkms -storepass <example-password> -storetype DKKS -keypass <example-password> \
  -certs <signed-jar-name>
                        <example-key-alias>