ADT 代码签名选项

ADT 使用 Java 加密体系结构 (JCA) 访问对 AIR 应用程序签名所使用的私钥和证书。签名选项标识 keystore 以及该 keystore 中的私钥和证书。

keystore 必须包含私钥和关联的证书链。如果签名证书链接到某计算机上的受信任证书,则在“AIR 安装”对话框中,证书公用名字段的内容会显示为发布者名称。

ADT 要求证书符合 x509v3 标准 ( RFC3280 ),并同时包含扩展密钥用法扩展和代码签名的相应值。应遵守证书中定义的约束,这些约束要求避免使用某些证书对 AIR 应用程序进行签名。

注: ADT 根据需要使用 Java 运行时环境代理设置来连接 Internet 资源,以便检查证书吊销列表和获取时间戳。如果在使用 ADT 连接这些 Internet 资源时遇到问题,并且网络需要特定的代理设置,则可能需要配置 JRE 代理设置。

AIR 签名选项语法

签名选项使用以下语法(在单个命令行上):

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

-alias keystore 中的密钥的别名。当 keystore 仅包含一个证书时,则不必指定别名。如果未指定任何别名,ADT 则使用 keystore 中的第一个密钥。

并非所有 keystore 管理应用程序都允许向证书分配别名。例如,当使用 Windows 系统 keystore 时,则使用证书的识别名称作为别名。使用 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 中,Keychain 中的证书别名与在 Keychain Access 应用程序中显示的名称相同。

-storetype keystore 的类型,由 keystore 实现确定。大多数 Java 安装随附的默认 keystore 实现支持 JKS PKCS12 类型。Java 5.0 包含对 PKCS11 类型和 Keychain 类型的支持,前者用于访问硬件标记中的 keystore,后者用于访问 Mac OS X keychain。Java 6.0 包含对 MSCAPI 类型的支持(在 Windows 中)。如果安装和配置了其他 JCA 提供程序,则可能还可以使用其他 keystore 类型。如果未指定任何 keystore 类型,则使用默认 JCA 提供程序的默认类型。

存储类型

Keystore 格式

最低 Java 版本

JKS

Java keystore 文件 (.keystore)

1.2

PKCS12

PKCS12 文件(.p12 或 .pfx)

1.4

PKCS11

硬件标记

1.5

KeychainStore

Mac OS X Keychain

1.5

Windows-MY 或 Windows-ROOT

MSCAPI

1.6

-keystore 基于文件的存储类型的 keystore 文件路径。

-storepass 访问 keystore 所需的密码。如果未指定密码,ADT 将提示您输入密码。

-keypass 访问用于对 AIR 应用程序签名的私钥所需的密码。如果未指定密码,ADT 将提示您输入密码。

注: 如果您输入密码作为 ADT 命令的一部分,则密码字符会保存在命令行历史记录中。因此,当证书的安全性很重要时,建议您不要使用 -keypass 或 -storepass 选项。另请注意,当忽略密码选项时,不会显示在密码提示处键入的字符(由于相同的安全性原因)。只需键入密码并按 Enter 键即可。

-providerName 指定的 keystore 类型的 JCA 提供程序。如果未指定提供程序,ADT 将使用该 keystore 类型的默认提供程序。

-tsa 指定符合 RFC3161 的时间戳服务器的 URL,以便对数字签名创建时间戳。如果未指定任何 URL,则使用 Geotrust 提供的默认时间戳服务器。对 AIR 应用程序签名设置时间戳时,仍可以在签名证书过期之后安装该应用程序,这是因为时间戳验证该证书在签名时是否有效。

如果 ADT 无法连接到时间戳服务器,则取消签名,并且不会生成任何包。指定 - tsa none 可以禁用时间戳设置功能。但是,对于打包的没有时间戳的 AIR 应用程序,该应用程序将在签名证书过期后停止安装。

注: 许多签名选项与 Java Keytool 实用程序的相同选项具有同等的效用。您可以使用 Keytool 实用程序在 Windows 中检查和管理 keystore。也可以在 Mac OS X 上使用 Apple® 安全实用程序实现此目的。

-provisioning-profile Apple iOS 供给文件。(只有在打包 iOS 应用程序时才需要指定此参数。)

签名选项示例

使用 .p12 文件签名:

-storetype pkcs12 -keystore cert.p12

使用默认 Java keystore 签名:

-alias AIRcert -storetype jks

使用特定 Java keystore 签名:

-alias AIRcert -storetype jks -keystore certStore.keystore

使用 Mac OS X keychain 签名:

-alias AIRcert -storetype KeychainStore -providerName Apple

使用 Windows 系统 keystore 签名:

-alias cn=AIRCert -storeype Windows-MY

使用硬件标签签名(请参考标记制造商提供的 Java 配置相关说明,以便使用该标记并获取正确的 providerName 值):

-alias AIRCert -storetype pkcs11 -providerName tokenProviderName

在不嵌入时间戳的情况下签名:

-storetype pkcs12 -keystore cert.p12 -tsa none