Jarsigner-Befehle

Wenn Sie die Jarsigner-Befehle in diesem Thema verwenden, stellen Sie sicher, dass Sie die unter Voraussetzungen für Keytool und Jarsigner beschriebenen Befehls-Flags verwenden.

JAR-Dateien mit einem Schlüssel signieren

Dieser Vorgang signiert eine JAR-Datei mit einem Schlüssel. Der Befehl wird mit jarsigner und JCE ausgeführt.

So signieren Sie eine JAR-Datei mit einem im HSM gespeicherten Schlüssel

Syntax:

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>
                    

Wenn eine Warnmeldung mit "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" angezeigt wird, fehlt dem lokalen Keystore ein signiertes Zertifikat.

Sie können einen Zertifikatskettenfehler mit den folgenden Vorgängen beheben:

  1. Verwenden Sie das Keytool-Programm, um einen CSR zu generieren, der dem Schlüssel auf dem HSM entspricht.

    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 \
    

    Hinweis:

    • -certreq wird zur Generierung eines CSR verwendet.
    • -alias gibt den Alias für den angegebenen Schlüssel an. Wenn dieser Alias angegeben wird und der Schlüssel nicht im Keystore vorhanden ist, sucht der DKKS-Keystore im HSM nach einem Label, das diesem Alias entspricht.
    • -keyalg rsa -keysize 4096 gibt den Algorithmus und die Schlüsselgröße für das Schlüsselpaar an.
    • -sigalg sha512withrsa -dname stellt die Details für den CSR bereit
  2. Verwenden Sie openssl, um ein neues selbstsigniertes lokales ca. X.509-Zertifikat (.crt-Datei) und einen privaten RSA-Schlüssel (.pem-Datei) zu erstellen.

    
    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. Fügen Sie das Zertifikat des CA-Eigentümers in den Keystore ein.

    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 \
    

    Beachten Sie Folgendes

    • -importcert wird zum Importieren eines Zertifikats verwendet
    • -noprompt weist das Programm an, keine Prompts zu verwenden
    • -alias gibt den Alias an, dem das CA-Zertifikat zugewiesen wird
    • -file ist die Datei für das Zertifikat
    • -keypass legt ein Kennwort für den Schlüssel fest
  4. Listen Sie das Zertifikat auf, um sicherzustellen, dass sich das lokale ca-Zertifikat im Keystore befindet:

    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 \
    

    Der Befehl gibt eine Ausgabe ähnlich der Folgenden zurück:

    Your keystore contains 1 entry
  5. Erstellen Sie mit openssl ein X.509-Zertifikat mit der generierten CSR und lokalen ca Crt. Legen Sie dann die Seriennummer für das neue Zertifikat fest:

    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. Importieren Sie mit keytool die Datei <output-crt>.crt in den 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. Bestätigen Sie, dass das Zertifikat erfolgreich importiert wurde:

    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 \

    Das Programm gibt eine Ausgabe ähnlich der folgenden zurück:

    Your keystore contains 1 entry
Tipp

Wenn Sie eine JAR-Datei mit einem neuen Schlüssel signieren, wird sichergestellt, dass der Signaturvorgang keinen Zertifikatskettenfehler verursacht, da das Zertifikat des neuen Schlüssels beim Erstellen zum lokalen Keystore hinzugefügt wird. Verwenden Sie die Anweisungen unter Schlüsselpaar generieren, um einen neuen Schlüssel mit Keytool zu erstellen.

Signaturdetails der JAR-Datei prüfen

Verwenden Sie das Flag -verify, um die Signaturdetails einer signierten JAR-Datei zu prüfen, einschließlich des Schlüssels, mit dem die Datei signiert wurde. Der Befehl wird mit jarsigner und JCE ausgeführt.

So prüfen Sie die signierte JAR-Datei mit dem Schlüssel

Syntax:

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>