O ADT usa o JCA (arquitetura de criptografia Java) para acessar chaves privadas e certificados para assinar aplicativos do AIR. As opções de assinatura identificam o armazenamento de chaves, a chave privada e o certificado dentro desse armazenamento de chaves.
O armazenamento de chaves deve incluir a chave privada e a cadeia de certificado associada. Se o certificado de assinatura estiver vinculado a um certificado confiável em um computador, o conteúdo do campo de nome comum do certificado será exibido como o nome do editor na caixa de diálogo de instalação do AIR.
O ADT requer que o certificado esteja em conformidade com o padrão x509v3 (
RFC3280
) e inclua a extensão de uso de chave estendida com os valores adequados para assinatura do código. As restrições definidas no certificado são respeitadas e poderiam impedir o uso de alguns certificados para assinar aplicativos do AIR.
Sintaxe de opções de assinatura do AIR
As opções de subscrição utilizam a seguinte sintaxe (numa linha de comando individual):
-alias aliasName
-storetype type
-keystore path
-storepass password1
-keypass password2
-providerName className
-tsa url
-alias
O alias de uma chave no armazenamento de chaves. Especificar um alias não é necessário quando um armazenamento de chaves contém apenas um único certificado. Se nenhum alias for especificado, o ADT usará a primeira chave do armazenamento de chaves.
Nem todos os aplicativos de gerenciamento do armazenamento de chaves permitem que um alias seja atribuído a certificados. Ao usar o armazenamento de chaves do sistema Windows, por exemplo, use o nome distinto do certificado como o alias. Você pode usar o utilitário Java Keytool para listar os certificados disponíveis para que possa determinar o alias. Por exemplo, executar o comando:
keytool -list -storetype Windows-MY
produz uma saída como a seguinte para um certificado:
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
Para se referir a esse certificado na linha de comando do ADT, defina o alias como:
CN=TestingCert,OU=QE,O=Adobe,C=US
No Mac OS X, o alias de um certificado no Keychain é o nome exibido no aplicativo Keychain Access.
-storetype
O tipo de armazenamento de chaves, determinado pela implementação do armazenamento de chaves. A implementação de armazenamento de chaves padrão incluída na maioria das instalações de Java suporta os tipos
JKS
e
PKCS12
. O Java 5.0 inclui suporte para o tipo
PKCS11
, para acessar armazenamentos de chaves em tokens de hardware e para o tipo
Keychain
, para acessar o chaveiro do Mac OS X. O Java 6.0 inclui suporte para o tipo
MSCAPI
(no Windows). Se outros provedores de JCA tiverem sido instalados e configurados, tipos adicionais de armazenamentos de chaves podem estar disponíveis. Se nenhum tipo de armazenamento de chave for especificado, o tipo padrão para o provedor de JCA padrão será usado.
Tipo de armazenamento
|
Formato de armazenamento de chave
|
Versão mínima de Java
|
JKS
|
Arquivo de armazenamento de chave Java (.keystore)
|
1.2
|
PKCS12
|
Arquivo PKCS12 (.p12 ou .pfx)
|
1.4
|
PKCS11
|
Token de hardware
|
1.5
|
KeychainStore
|
Chaveiro do Mac OS X
|
1.5
|
Windows-MY ou Windows-ROOT
|
MSCAPI
|
1.6
|
-keystore
O caminho para o arquivo de armazenamento de chaves para tipos de armazenamento com base no arquivo.
-storepass
A senha exigida para acessar o armazenamento de chaves. Se não especificada, o ADT solicita a senha.
-keypass
A senha exigida para acessar a chave privada usada para assinar o aplicativo do AIR. Se não especificada, o ADT solicita a senha.
Nota:
Se você digitar uma senha como parte do comando do ADT, os caracteres da senha são gravados no histórico da linha de comando. Portanto, o uso de opções -keypass ou -storepass não é recomendado quando a segurança do certificado é importante. Observe também que ao omitir as opções de senha, os caracteres que você digita nos prompts de senha não são exibidos (por razões de segurança). Basta digitar a senha e pressionar a tecla Enter.
-providerName
O provedor de JCA para o tipo de armazenamento de chaves especificado. Se não especificado, o ADT usa o provedor padrão para esse tipo de armazenamento de chave.
-tsa
Especifica a URL de um servidor compatível com carimbo de data e hora
RFC3161
para carimbar com data e hora a assinatura digital. Se nenhuma URL for especificada, um servidor padrão com carimbo de data/hora fornecido pela Geotrust será usado. Quando a assinatura de um aplicativo do AIR receber uma marca de data/hora, o aplicativo poderá ainda ser instalado depois que o certificado de assinatura expirar, porque a marca de data/hora verifica se o certificado era válido no momento da assinatura.
Se o ADT não puder se conectar ao servidor de carimbo de data/hora, a assinatura será cancelada e nenhum empacotamento será produzido. Especifique
-
tsa none
para desabilitar o carimbo de data/hora. No entanto, um aplicativo do AIR empacotado sem um carimbo de data/hora deixa de poder ser instalado depois que o certificado de assinatura expira.
Nota:
Muitas das opções de assinatura são equivalentes à mesma opção do utilitário Java Keytool. Você pode usar o utilitário Keytool para examinar e gerenciar armazenamentos de chaves no Windows. O utilitário de segurança da Apple® também pode ser usado para esse fim no Mac OS X.
-provisioning-profile
O arquivo de aprovisionamento iOS da Apple. (Obrigatório apenas para compactação de aplicativos iOS.)
Exemplos de opção de assinatura
Assinatura com um arquivo .p12:
-storetype pkcs12 -keystore cert.p12
Assinatura com o armazenamento de chaves Java padrão:
-alias AIRcert -storetype jks
Assinatura com o armazenamento de chaves Java específico:
-alias AIRcert -storetype jks -keystore certStore.keystore
Assinatura com o chaveiro do Mac OS X:
-alias AIRcert -storetype KeychainStore -providerName Apple
Assinatura com o armazenamento de chaves do sistema Windows:
-alias cn=AIRCert -storeype Windows-MY
Assinatura com um token de hardware (consulte as instruções do fabricante do token sobre como configurar Java para usar o token e para o valor correto de
providerName
):
-alias AIRCert -storetype pkcs11 -providerName tokenProviderName
Assinatura sem incorporar um carimbo de data/hora:
-storetype pkcs12 -keystore cert.p12 -tsa none