メインコンテンツまでスキップ

sslTrusJarsigner 利用ガイド

事前準備​

使用前に以下をご用意ください:

  • JDK 8 以降。
  • sslTrusJarsigner-<version>.jar。
  • Access Key、Access Secret および証明書番号。
  • 署名対象の JAR ファイルまたは TIMS/1E XML ファイル。

本文中の <version>、認証情報、証明書番号およびファイルパスを実際の値に置き換えてください。

ダウンロード​

以下のページから最新リリースパッケージをダウンロードします:

最新パッケージをダウンロード

ZIP ファイルをダウンロードして解凍すると、以下が取得できます:

  • sslTrusJarsigner-<version>.jar
  • SHA-256 チェックサムファイル

使用前にチェックサムファイルを使用して JAR ファイルの整合性を確認することをお勧めします。

実行環境の確認​

以下のコマンドを実行して、Java、jarsigner およびツールファイルが利用可能であることを確認します:

java -version
jarsigner -help
java -jar sslTrusJarsigner-<version>.jar --version

帮助情報を表示:

java -jar sslTrusJarsigner-<version>.jar --help

認証情報の設定​

Linux および macOS​

export SSLTRUS_JARSIGNER_ACCESS_KEY="YOUR_ACCESS_KEY"
export SSLTRUS_JARSIGNER_ACCESS_SECRET="YOUR_ACCESS_SECRET"
export SSLTRUS_JARSIGNER_CERT_CODE="YOUR_CERT_CODE"

Windows PowerShell​

$env:SSLTRUS_JARSIGNER_ACCESS_KEY = "YOUR_ACCESS_KEY"
$env:SSLTRUS_JARSIGNER_ACCESS_SECRET = "YOUR_ACCESS_SECRET"
$env:SSLTRUS_JARSIGNER_CERT_CODE = "YOUR_CERT_CODE"

如果服務人員提供了専用服務地址,還需要進行以下設定:

Linux 和 macOS:

export SSLTRUS_JARSIGNER_URL="YOUR_SERVICE_URL"

Windows PowerShell:

$env:SSLTRUS_JARSIGNER_URL = "YOUR_SERVICE_URL"

専用サービスアドレスが提供されていない場合は、この変数を設定しないでください。

署名​

以下の例では、app-unsigned.jar に署名して app-signed.jar として保存します。固定パラメータは、例のとおりにそのまま使用してください。

JDK 9 以降​

Linux および macOS:

jarsigner \
-keystore NONE \
-storetype SSLTRUS \
-storepass SSLTRUS \
-providerPath "sslTrusJarsigner-<version>.jar" \
-providerClass com.racent.codesign.SSLTrusProvider \
-sigalg SHA256withRSA \
-tsa http://timestamp.sectigo.com \
-signedjar "app-signed.jar" \
"app-unsigned.jar" \
"$SSLTRUS_JARSIGNER_CERT_CODE"

Windows PowerShell:

jarsigner `
-keystore NONE `
-storetype SSLTRUS `
-storepass SSLTRUS `
-providerPath "sslTrusJarsigner-<version>.jar" `
-providerClass com.racent.codesign.SSLTrusProvider `
-sigalg SHA256withRSA `
-tsa http://timestamp.sectigo.com `
-signedjar "app-signed.jar" `
"app-unsigned.jar" `
"$env:SSLTRUS_JARSIGNER_CERT_CODE"

JDK 8​

まず、JAVA_HOME が完全なJDK 8を指していることを確認してください。

Linux および macOS:

jarsigner \
-J-cp \
-J"$JAVA_HOME/lib/tools.jar:sslTrusJarsigner-<version>.jar" \
-keystore NONE \
-storetype SSLTRUS \
-storepass SSLTRUS \
-providerClass com.racent.codesign.SSLTrusProvider \
-sigalg SHA256withRSA \
-tsa http://timestamp.sectigo.com \
-signedjar "app-signed.jar" \
"app-unsigned.jar" \
"$SSLTRUS_JARSIGNER_CERT_CODE"

Windows PowerShell:

jarsigner `
-J-cp `
"-J$env:JAVA_HOME\lib\tools.jar;sslTrusJarsigner-<version>.jar" `
-keystore NONE `
-storetype SSLTRUS `
-storepass SSLTRUS `
-providerClass com.racent.codesign.SSLTrusProvider `
-sigalg SHA256withRSA `
-tsa http://timestamp.sectigo.com `
-signedjar "app-signed.jar" `
"app-unsigned.jar" `
"$env:SSLTRUS_JARSIGNER_CERT_CODE"
注意
  • コマンド末尾の証明書番号は SSLTRUS_JARSIGNER_CERT_CODE と一致している必要があります。
  • 元の JAR を上書きしないよう、常に -signedjar を使用して新しいファイルを生成することをお勧めします。
  • タイムスタンプが不要な場合は、-tsa とそれ以降のアドレスを削除できます。

XML への署名(XMLDSig)​

TIMS/1E XML では、sign-xml コマンドを使用して XML デジタル署名(XMLDSig) enveloped 署名を生成します。秘密鍵は引き続きリモート署名サービス内にのみ保持されます。ツールはローカルで XMLDSig に必要なダイジェストおよび署名構造を生成し、リモートサービスが RSA 署名を完了します。

Linux および macOS:

java -jar sslTrusJarsigner-<version>.jar \
sign-xml \
"input.xml" \
"signed.xml" \
"$SSLTRUS_JARSIGNER_CERT_CODE"

Windows PowerShell:

java -jar sslTrusJarsigner-<version>.jar `
sign-xml `
"input.xml" `
"signed.xml" `
"$env:SSLTRUS_JARSIGNER_CERT_CODE"

署名形式​

生成される署名は、XMLDSig 標準名前空間 http://www.w3.org/2000/09/xmldsig# を使用し、Signature ノードをルートノードの最後の子ノードとして出力ファイルに書き込みます。現在の署名プロファイルは以下のように固定されています:

項目固定値
署名タイプEnveloped signature
署名範囲XMLドキュメント全体、Reference URI=""
Reference TransformEnveloped Signature Transform
CanonicalizationInclusive Canonical XML 1.0
ダイジェストアルゴリズムSHA-256
署名アルゴリズムRSA-SHA256
KeyInfoX509Data、デフォルトでリーフ証明書を含む

呼び出し側はダイジェストを計算したり SignatureValue を構築したりする必要はありません。ツールはリモート証明書のリーフ証明書を使用して KeyInfo/X509Data を埋め、XML に最終的な SignatureValue を書き込みます。

完全な証明書チェーンを含む​

默认出力にはリーフ証明書のみが含まれ、XMLのサイズを抑えつつ、一般的なTIMS/1Eファイルと一致させます。受信側がXML内に中間証明書チェーンを含めることを要求する場合は、コマンドの末尾に --full-chain を追加してください:

java -jar sslTrusJarsigner-<version>.jar \
sign-xml \
"input.xml" \
"signed.xml" \
"$SSLTRUS_JARSIGNER_CERT_CODE" \
--full-chain

--full-chain は KeyInfo/X509Data 内の証明書リストのみに影響し、署名範囲、ダイジェストアルゴリズム、署名アルゴリズムは変更しません。このオプションは証明書番号の前後に配置できます。証明書番号を指定しない場合は、SSLTRUS_JARSIGNER_CERT_CODE が使用されます。

入力と使用上の制限​

  • 入力は形式が正しい XML であり、ルートノードを含む必要があります。
  • 入力ファイルに XMLDSig Signature ノードがすでに含まれていることはできません。ツールは重複署名を拒否し、署名範囲を確認できないファイルの生成を回避します。
  • 現時点では、ドキュメント全体の enveloped 署名のみをサポートしています。detached signature、要素 ID による署名、カスタム XMLDSig プロファイルには対応していません。
  • ツールは XML 外部エンティティと外部 DTD の読み込みを無効にするため、外部エンティティの展開に依存する XML は受け付けません。
  • 署名完了後は、XML の構造、テキスト、属性、名前空間を変更しないでください。このような変更はすべて XMLDSig 検証の失敗につながります。常に元の入力ファイルを保持し、署名結果を新しい出力ファイルに書き込む必要があります。

検証ファイルの生成​

署名後、検証に必要な JKS ファイルを生成できます。

Linux および macOS:

java -jar sslTrusJarsigner-<version>.jar \
generate-keystore \
"$SSLTRUS_JARSIGNER_CERT_CODE" \
"verify.jks" \
"SSLTRUS"

Windows PowerShell:

java -jar sslTrusJarsigner-<version>.jar `
generate-keystore `
"$env:SSLTRUS_JARSIGNER_CERT_CODE" `
"verify.jks" `
"SSLTRUS"

verify.jks は署名の検証のみに使用され、署名の実行には使用できません。

署名の検証​

生成した verify.jks を使用して、署名済みの JAR を検証します:

jarsigner \
-verify \
-verbose \
-certs \
-keystore "verify.jks" \
-storetype JKS \
-storepass "SSLTRUS" \
"app-signed.jar"

如果只需要確認JARの署名情報:

jarsigner -verify -verbose -certs "app-signed.jar"

よくある質問​

Access Key、Access Secret、または証明書番号が不足しているというエラーが表示される​

現在のターミナルで以下の環境変数が設定されていることを確認してください:

  • SSLTRUS_JARSIGNER_ACCESS_KEY
  • SSLTRUS_JARSIGNER_ACCESS_SECRET
  • SSLTRUS_JARSIGNER_CERT_CODE

環境変数を設定した後、同じターミナルウィンドウで署名コマンドを実行する必要があります。

非法选项: -providerPath というエラーが表示される​

現在JDK 8を使用しています。この記事内のJDK 8署名コマンドに切り替えてください。

com.racent.codesign.SSLTrusProvider をロードできないというエラーが表示される​

以下を確認してください:

  • sslTrusJarsigner-<version>.jar のパスが正しいか。
  • ファイル名のバージョン番号が実際のファイルと一致しているか。
  • JDK 8 の JAVA_HOME が完全なJDKを指しているか。

証明書または alias が見つからないというエラーが表示される​

以下を確認してください:

  • 証明書番号が正しいか。
  • コマンド末尾の証明書番号が環境変数と一致しているか。
  • 現在の認証情報にその証明書を使用する権限があるか。

署名リクエストが失敗する​

以下を確認してください:

  • ネットワーク接続、プロキシ、ファイアウォール設定。
  • 認証情報と証明書番号が正しいか。
  • 専用サービスアドレスがサービス担当者から提供された内容どおりに設定されているか。

それでも解決しない場合は、完全なエラー情報を保存し、テクニカルサポートに連絡してください。エラー情報を送信する前に、認証情報を削除またはマスキングしてください。

タイムスタンプが失敗する​

現在のネットワークがコマンド内のタイムスタンプアドレスにアクセスできることを確認してください。業務上問題がなければ、一時的に -tsa 以降のアドレスを削除し、再度署名を実行して問題を特定できます。

セキュリティ上の注意事項​

  • ソースコード、ドキュメント、共有スクリプト、またはイメージに実際の Access Secret を保存しないでください。
  • 認証情報を含むコマンドライン、ターミナル履歴、またはパイプラインログを外部と共有しないでください。
  • 自動化環境では、保護されたキー変数を使用して認証情報を注入してください。
  • 信頼できる配布チャネルからツールをダウンロードし、使用前にファイルの整合性を検証してください。
  • 署名前の元の JAR ファイルを保存しておくことを推奨します。