SignJar

說明

簽署 JAR 讓使用者可以驗證發行者。

使用 jarsigner 命令列工具簽署 JAR 檔案。它會使用 jar 屬性中的命名檔案,以及選用的 destDirsignedJar 屬性。也支援巢狀路徑;在此僅允許(選用的)destDir。如果未提供目標目錄或明確的 JAR 檔案名稱,JAR 會在原處簽署。

相依性規則

參數

屬性 說明 必要
jar 要簽署的 jar 檔案 是,除非已使用巢狀路徑
alias 要簽署的別名
storepass 金鑰庫完整性的密碼。Ant 程式不會使用 -storepass 命令列引數,而是會在 jarsigner 提示時傳送密碼給 jarsigner。
keystore 金鑰庫位置
storetype 金鑰庫類型
keypass 私人金鑰的密碼(如果不同)
sigfile .SF/.DSA 檔案的名稱
signedjar 已簽署 JAR 檔案的名稱。只有在設定 jar 屬性時才能設定此屬性。
verbose (true|false) 簽署時的詳細輸出 否;預設 false
strict (true|false) 簽署時的嚴格檢查。
自 Ant 1.9.1 起.
否;預設 false
internalsf (true|false) 在簽章區塊中包含 .SF 檔案 否;預設 false
sectionsonly (true|false) 不計算整個明細的雜湊 否;預設 false
lazy 控制簽章檔案的存在是否表示 JAR 已簽署的旗標。僅在目標 JAR 與來源 JAR 相符時使用此旗標 否;預設 false
maxmemory 指定 jarsigner JVM 將使用的最大記憶體。以標準 Java 記憶體規格的樣式指定(例如 128m = 128 MB)
preservelastmodified 讓已簽署檔案與原始 jar 檔案具有相同的上次修改時間。 否;預設為 false
tsaurl Java 5+ 中已加蓋時間戳記 JAR 檔案的時間戳記授權單位的 URL
tsacert Java 5+ 中已加蓋時間戳記 JAR 檔案的時間戳記授權單位的 keystore 中的別名
tsaproxyhost 連線至 TSA 伺服器時要使用的代理主機
tsaproxyport 連線至 TSA 伺服器時要使用的代理埠
executable 指定特定 jarsigner 可執行檔,以取代預設二進位檔(與執行 Apache Ant 的 JDK 相同)。
必須支援與 Sun JDK jarsigner 指令相同的命令列選項。自 Ant 1.8.0 起
force 即使 jar 檔案看似未過期或已簽署,是否強制簽署 jar 檔案。自 Ant 1.8.0 起 否;預設 false
sigalg 簽署演算法名稱
digestalg 摘要演算法名稱
tsadigestalg TSA 摘要演算法名稱。自 Ant 1.10.2 起
providername 列在安全性屬性檔案中的加密服務提供者的名稱。自 Ant 1.10.6 起
providerclass 當服務提供者未列在安全性屬性檔案中時,加密服務提供者的主類別檔案名稱。自 Ant 1.10.6 起
providerarg 表示 provider_class_name 建構函式的選用字串輸入引數。如果未設定 providerclass,則會忽略。自 Ant 1.10.6 起

巢狀元素的參數

屬性 說明 必要
path 要簽署的 JAR 檔案路徑。自 Ant 1.7 起
fileset 要簽署的 JAR 檔案的檔案集。
mapper 在簽署期間重新命名 jar 檔案的對應器 否,且只能提供一個
sysproperty JVM 系統屬性,語法與 Ant 環境變數 相同 否,且只能提供一個
arg 使用此參數指定 keytool 命令列引數,而不會透過屬性明確支援。自 Ant 1.10.6 起

範例

如需產生程式碼簽署憑證的說明,請參閱 keytool 文件 和/或憑證頒發機構的說明。

使用別名 apache-group 簽署 ant.jar,並透過 secret 密碼存取金鑰庫和私人金鑰。

<signjar jar="${dist}/lib/ant.jar"
         alias="apache-group" storepass="secret"/>

簽署所有符合 dist/**/*.jar 模式的 JAR 檔案,並在簽署後將它們複製到目錄 signed。flatten 對應器表示它們全部會複製到這個目錄,而不是子目錄。

<signjar destDir="signed"
         alias="testonly" keystore="testkeystore"
         storepass="apacheant"
         preservelastmodified="true">
  <path>
    <fileset dir="dist" includes="**/*.jar"/>
  </path>
  <flattenmapper/>
</signjar>

就地簽署 dist/**/*.jar 中的所有 JAR 檔案。使用延遲簽署,因此只有檔案尚未簽署時才會簽署。

<signjar alias="testonly" keystore="testkeystore"
         storepass="apacheant"
         lazy="true">
  <path>
    <fileset dir="dist" includes="**/*.jar"/>
  </path>
</signjar>

使用摘要演算法 SHA1 和簽章演算法 MD5withRSA 簽署 dist/**/*.jar 中的所有 JAR 檔案。當您要使用 JDK 7 jarsigner(預設使用 SHA256 和 SHA256withRSA)建立已簽署的 JAR 檔案,並將其部署在不支援 SHA256 和 SHA256withRSA 的平台上時,這項功能特別有用。

<signjar alias="testonly" keystore="testkeystore"
         storepass="apacheant"
         sigalg="MD5withRSA"
         digestalg="SHA1">
  <path>
    <fileset dir="dist" includes="**/*.jar"/>
  </path>
</signjar>

關於時間戳記簽署

時間戳記會記錄簽署發生的日期和時間,讓簽章可以根據那個時間點進行驗證。透過受信任的時間戳記,使用者可以驗證簽署發生在憑證過期或撤銷之前。沒有這個時間戳記,使用者只能驗證簽章為其目前日期。

時間戳記 JAR 檔案是在 Java 5 中引入的;它們自 Ant 1.7 起受到支援。未驗證的代理程式可用於存取 TSA,自 Ant 1.9.5 起

常見的公開時間戳記授權包括