ADT 程式碼簽署選項

ADT 會使用 Java 密碼架構 (JCA) 存取用於簽署 AIR 應用程式的私密金鑰和憑證。這些簽署選項會識別金鑰儲存,以及金鑰儲存中的私密金鑰和憑證。

金鑰儲存必須包含私密金鑰和相關的憑證鍊結。如果簽署憑證鏈結至電腦上受信任的憑證,則憑證的一般名稱欄位內容就會以發行者名稱的形式顯示在 AIR 安裝對話方塊中。

ADT 會要求憑證符合 x509v3 標準 ( RFC3280 ),並且包含具有適當值的「擴充金鑰使用方式」擴充功能供程式碼簽署使用。憑證中定義的限制都將予以遵守,且這些限制可能會禁止使用某些憑證來簽署 AIR 應用程式。

備註: ADT 會適時使用 Java 執行階段環境 Proxy 設定連線至網際網路資源,以檢查憑證撤銷清單並取得時間戳記。如果您在使用 ADT 連線至這些網際網路資源時遇到問題,而且網路需要特定的 Proxy 設定,則您可能必須設定 JRE Proxy 設定。

AIR 簽署選項語法

簽署選項使用下列語法 (在單一命令列上):

-alias aliasName 
-storetype type 
-keystore path 
-storepass password1 
-keypass password2 
-providerName className 
-tsa url

-alias :金鑰儲存中金鑰的別名。如果金鑰儲存中只包含一個憑證,就不需要指定別名。如果未指定別名,ADT 就會使用金鑰儲存中的第一個金鑰。

並非所有的金鑰儲存管理應用程式都允許將別名指定給憑證。例如,使用 Windows 系統金鑰存放區時,請使用憑證的辨別名稱做為別名。您可以使用 Java Keytool 公用程式列出可用的憑證,如此即可決定別名。例如,您可以執行下列命令:

keytool -list -storetype Windows-MY

便會產生憑證的下列輸出:

CN=TestingCert,OU=QE,O=Adobe,C=US, PrivateKeyEntry, 
Certificate fingerprint (MD5): 73:D5:21:E9:8A:28:0A:AB:FD:1D:11:EA:BB:A7:55:88

若要在 ADT 命令列參考這個憑證,請將別名設定為:

CN=TestingCert,OU=QE,O=Adobe,C=US

在 Mac OS X 中,「鑰匙圈」內憑證的別名就是「鑰匙圈存取」應用程式中顯示的名稱。

-storetype :金鑰儲存的類型,由金鑰儲存實作決定。大部分情況下,在安裝 Java 時一併安裝的預設金鑰儲存實作可支援 JKS PKCS12 類型。Java 5.0 包含對 PKCS11 類型的支援 (可用於存取硬體字符上的金鑰儲存) 和對 Keychain 類型的支援 (可用於存取 Mac OS X 鑰匙圈)。Java 6.0 包含對 MSCAPI 類型 (適用於 Windows) 的支援。如果已經安裝並設定其它 JCA 提供者,那麼也可以使用其它金鑰儲存類型。如果未指定金鑰儲存類型,則會使用預設 JCA 提供者的預設類型。

儲存類型

金鑰儲存格式

最小 Java 版本

JKS

Java 金鑰儲存檔 (.keystore)

1.2

PKCS12

PKCS12 檔 (.p12 或 .pfx)

1.4

PKCS11

硬體字符

1.5

KeychainStore

Mac OS X 鑰匙圈

1.5

Windows-MY 或 Windows-ROOT

MSCAPI

1.6

-keystore :檔案架構儲存類型的金鑰儲存檔案路徑。

-storepass :存取金鑰儲存所需的密碼。如果未指定,ADT 就會提示您輸入密碼。

-keypass :存取用來簽署 AIR 應用程式之私密金鑰時所需的密碼。如果未指定,ADT 就會提示您輸入密碼。

備註: 如果您將密碼輸入做為 ADT 命令的一部分,則密碼字元便會儲存在命令列記錄中。因此,當憑證的安全性很重要時,不建議您使用 -keypass 或 -storepass 選項。另外請注意,當您省略密碼選項時,便不會顯示在密碼提示時所輸入的字元 (基於相同的安全性考量)。只要輸入密碼並按 Enter 鍵即可。

-providerName :指定之金鑰儲存類型的 JCA 提供者。如果未指定,ADT 就會根據該類型的金鑰儲存,使用預設的提供者。

-tsa :指定符合 RFC3161 之時間戳記伺服器的 URL,以便為數位簽名加上時間戳記。如果未指定 URL,則會使用 Geotrust 提供的預設時間戳記伺服器。AIR 應用程式的簽名在加上時間戳記之後,即使簽署憑證過期,仍然可以安裝應用程式,因為時間戳記已經確認當初簽署的憑證有效。

如果 ADT 無法連接至時間戳記伺服器,簽署作業就會取消,並且不會產生套件。指定 - tsa none 即可停用時間戳記功能。但是,如果 AIR 應用程式在封裝時沒有加上時間戳記,則簽署憑證過期之後就無法安裝應用程式。

備註: 許多的簽署選項與 Java Keytool 公用程式的選項相同。您可以使用 Keytool 公用程式,檢查及管理 Windows 中的金鑰儲存。在 Mac OS X 中,您也可以使用 Apple® 安全性公用程式來達到上述目的。

-provisioning-profile :Apple iOS 佈建檔案(僅封裝 iOS 應用程式時需要)。

簽署選項範例

使用 .p12 檔案進行簽署:

-storetype pkcs12 -keystore cert.p12

使用預設的 Java 金鑰儲存進行簽署:

-alias AIRcert -storetype jks

使用特定的 Java 金鑰儲存進行簽署:

-alias AIRcert -storetype jks -keystore certStore.keystore

使用 Mac OS X 鑰匙圈進行簽署:

-alias AIRcert -storetype KeychainStore -providerName Apple

使用 Windows 系統金鑰儲存進行簽署:

-alias cn=AIRCert -storeype Windows-MY

使用硬體字符進行簽署 (請參考字符廠商關於設定 Java 的指示以使用字符及提供正確的 providerName 值):

-alias AIRCert -storetype pkcs11 -providerName tokenProviderName

在沒有內嵌時間戳記的情況下進行簽署:

-storetype pkcs12 -keystore cert.p12 -tsa none