Jarsignerコマンド

このトピックのJarsignerコマンドを使用する場合は、「KeytoolおよびJarsignerの前提条件」で説明されているコマンド・フラグを使用してください。

キーを使用したJarファイルの署名

この操作は、キーを使用してJARファイルに署名します。このコマンドは、jarsignerとJCEを使用して実行します。

HSMに格納されているキーを使用してJARファイルに署名するには

コマンド構文:

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>

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」という警告メッセージを受け取った場合、ローカルキーストアには署名付き証明書がありません。

証明書チェーン・エラーは、次の操作で解決できます。

  1. keytoolプログラムを使用して、HSMのキーに対応するCSRを生成します。

    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 \
    

    次に注意してください:

    • CSRを生成するには、-certreqを使用します。
    • -aliasは、指定されたキーの別名を示します。この別名を指定することで、キーがキーストアに存在しない場合、DKKSキーストアはHSMでこの別名に一致するラベルを検索します。
    • -keyalg rsa -keysize 4096は、キー・ペアのアルゴリズムおよびキー・サイズを指定します
    • -sigalg sha512withrsa -dnameは、CSRの詳細を示します。
  2. opensslを使用して、新しい自己署名ローカル・カテゴリX.509証明書(.crtファイル)およびRSA秘密キー(.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. CA所有者証明書をキーストアに挿入します。

    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 \
    

    次に注意してください

    • -importcertは、証明書のインポートに使用されます。
    • -nopromptは、プロンプトを使用しないようにプログラムに指示します。
    • -aliasは、CA証明書が割り当てられる別名を指定します
    • -fileは証明書のファイルです
    • -keypassは、キーのパスワードを設定します。
  4. 証明書を一覧表示して、ローカルCA証明書がキーストア内にあることを確認します。

    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 \
    

    このコマンドでは次のような出力を返します。

    Your keystore contains 1 entry
  5. opensslを使用して、生成されたCSRおよびローカル・カテゴリCrtを使用してX.509証明書を作成します。次に、新しい証明書のシリアル番号を設定します。

    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. keytoolを使用して、<output-crt>.crtファイルをキーストアにインポートします。

    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. 証明書が正常にインポートされたことを確認します。

    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 \

    プログラムは、次のような出力を返します。

    Your keystore contains 1 entry
ヒント

jarファイルに新しいキーで署名すると、作成時に新しいキーの証明書がローカル・キーストアに追加されるため、署名操作によって証明書チェーン・エラーが生成されないことが保証されます。keytoolを使用して新しいキーを作成するには、「キー・ペアの生成」の手順を使用します。

JARファイル署名の詳細の確認

-verifyフラグを使用して、署名付きJARファイルの署名詳細(ファイルの署名に使用されたキーを含む)を確認します。このコマンドは、jarsignerとJCEを使用して実行します。

署名付きJARファイルをキーで検証するには

コマンド構文:

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>