簽署 JAR 讓使用者可以驗證發行者。
使用 jarsigner 命令列工具簽署 JAR 檔案。它會使用 jar 屬性中的命名檔案,以及選用的 destDir 或 signedJar 屬性。也支援巢狀路徑;在此僅允許(選用的)destDir。如果未提供目標目錄或明確的 JAR 檔案名稱,JAR 會在原處簽署。
相依性規則
true,則只有當 JAR 不包含此別名的簽章時才會簽署 JAR。
false,則會簽署 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 起。
常見的公開時間戳記授權包括