Narzędzie ADT korzysta z architektury JCA (Java Cryptography Architecture) w celu uzyskiwania dostępu do kluczy prywatnych i certyfikatów przeznaczonych do podpisywania aplikacji AIR. Opcje podpisywania określają magazyn kluczy, klucz prywatny i certyfikat w tym magazynie kluczy.
Magazyn kluczy musi zawierać klucz prywatny oraz skojarzony z nim łańcuch certyfikatów. Jeśli certyfikat podpisujący prowadzi do zaufanego certyfikatu na komputerze, wówczas zawartość pola wspólnej nazwy certyfikatu jest wyświetlana jako nazwa wydawcy w oknie dialogowym instalowania środowiska AIR.
Narzędzie ADT wymaga, aby certyfikat był zgodny ze standardem x509v3 (
RFC3280
) i zawierał rozszerzenie Extended Key Usage z odpowiednimi wartościami dla podpisywania kodu. Ograniczenia zdefiniowane w ramach certyfikatu są uwzględniane i mogą wykluczać użycie niektórych certyfikatów na potrzeby podpisywania aplikacji AIR.
Składnia opcji podpisywania środowiska AIR
Opcje podpisywania korzystają z następującej składni (w jednym wierszu polecenia):
-alias aliasName
-storetype type
-keystore path
-storepass password1
-keypass password2
-providerName className
-tsa url
-alias
Alias klucza w magazynie kluczy. Określenie aliasa nie jest konieczne, jeśli magazyn kluczy zawiera wyłącznie pojedynczy certyfikat. Jeśli alias nie zostanie określony, wówczas narzędzie ADT użyje pierwszego klucza z magazynu kluczy.
Nie wszystkie aplikacje do zarządzania magazynami kluczy zezwalają na przypisywanie aliasów do certyfikatów. Jeśli używany jest magazyn kluczy systemu Windows, jako aliasu należy użyć nazwy wyróżniającej certyfikatu. Za pomocą programu narzędziowego Java Keytool można wyświetlić listę dostępnych certyfikatów, dzięki czemu możliwe będzie określenie aliasu. Przykład: uruchomienie polecenia:
keytool -list -storetype Windows-MY
powoduje wyświetlenie następujących danych dla certyfikatu:
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
W celu utworzenia odwołania do tego certyfikatu w wierszu poleceń ADT należy ustawić następujący alias:
CN=TestingCert,OU=QE,O=Adobe,C=US
W systemie Mac OS X alias certyfikatu w łańcuchu kluczy jest nazwą wyświetlaną w aplikacji Keychain Access.
-storetype
Typ magazynu kluczy określony w implementacji magazynu kluczy. Domyślna implementacja magazynu kluczy dołączona do większości instalacji Java obsługuje typy
JKS
i
PKCS12
. Java 5.0 obsługuje typ
PKCS11
, który umożliwia dostęp do magazynów kluczy w tokenach sprzętowych, a także typ
Keychain
przeznaczony do dostępu do łańcucha kluczy Mac OS X. Java 6.0 obsługuje typ
MSCAPI
(w systemie Windows). W przypadku zainstalowania i skonfigurowania innych dostawców JCA mogą być dostępne inne typy magazynów kluczy. Jeśli nie określono typu magazynu kluczy, wówczas używany jest domyślny typ dla domyślnego dostawcy JCA.
Typ magazynu
|
Format magazynu kluczy
|
Minimalna wersja Java
|
JKS
|
Plik magazynu kluczy Java (.keystore)
|
1.2
|
PKCS12
|
Plik PKCS12 (.p12 lub .pfx)
|
1.4
|
PKCS11
|
Token sprzętowy
|
1.5
|
KeychainStore
|
Mac OS X Keychain
|
1.5
|
Windows-MY lub Windows-ROOT
|
MSCAPI
|
1.6
|
-keystore
Ścieżka do pliku magazynu kluczy dla magazynów opartych na plikach.
-storepass
Hasło wymagane do uzyskania dostępu do magazynu kluczy. Jeśli nie zostanie określone, program ADT wyświetli monit o podanie hasła.
-keypass
Hasło wymagane do uzyskania dostępu do klucza prywatnego, który służy do podpisania aplikacji AIR. Jeśli nie zostanie określone, program ADT wyświetli monit o podanie hasła.
Uwaga:
W przypadku wpisania hasła jako części polecenia ADT znaki hasła zostaną zapisane w historii wiersza poleceń. Z tego powodu nie jest zalecane stosowanie opcji -keypass ani -storepass, gdy jest ważne bezpieczeństwo certyfikatu. W przypadku pominięcia opcji hasła znaki wpisywane w odpowiedzi na żądania hasła nie są wyświetlane (z tych samych powodów związanych z bezpieczeństwem). Wystarczy wpisać hasło i nacisnąć klawisz Enter.
-providerName
Dostawca JCA dla magazynu kluczy określonego typu. Jeśli ten argument nie zostanie określony, program ADT użyje domyślnego dostawcy dla magazynu kluczy tego typu.
-tsa
Określa adres URL serwera znaczników czasu zgodnego ze standardem
RFC3161
na potrzeby oznaczenia podpisu cyfrowego znacznikiem czasu. Jeśli nie określono adresu URL, używany jest domyślny serwer znaczników czasu udostępniany przez Geotrust. Jeśli podpis aplikacji AIR jest oznaczony znacznikiem czasu, aplikacja może zostać zainstalowana po utracie ważności certyfikatu, ponieważ znacznik czasu potwierdza, że certyfikat był poprawny w czasie podpisywania.
Jeśli narzędzie ADT nie może połączyć się z serwerem znaczników czasu, wówczas podpisywanie zostaje anulowane i pakiet nie zostanie wygenerowany. W celu wyłączenia wstawiania znaczników czasu należy wprowadzić opcję
-
tsa none
. Jednak po utracie ważności certyfikatu podpisującego nie będzie możliwości zainstalowania aplikacji AIR zapakowanej bez znacznika czasu.
Uwaga:
Liczne opcje podpisywania odpowiadają tej samej opcji narzędzia Java Keytool. Za pomocą programu narzędziowego Keytool można sprawdzać magazyny kluczy Windows i zarządzać nimi. Do tego celu można w systemie Mac OS X wykorzystać program narzędziowy zabezpieczeń Apple®.
-provisioning-profile
Plik informacyjny systemu Apple iOS. (Ta opcja jest wymagana wyłącznie w przypadku pakowania aplikacji systemu iOS).
Przykłady opcji podpisywania
Podpisywanie za pomocą pliku .p12:
-storetype pkcs12 -keystore cert.p12
Podpisywanie za pomocą domyślnego magazynu kluczy Java:
-alias AIRcert -storetype jks
Podpisywanie za pomocą określonego magazynu kluczy Java:
-alias AIRcert -storetype jks -keystore certStore.keystore
Podpisywanie za pomocą łańcucha kluczy Mac OS X:
-alias AIRcert -storetype KeychainStore -providerName Apple
Podpisywanie za pomocą magazynu kluczy Windows:
-alias cn=AIRCert -storeype Windows-MY
Podpisywanie za pomocą tokenu sprzętowego (zapoznać się z instrukcjami producenta tokenu dotyczącymi konfigurowania Java do użycia tokenu oraz w celu określenia poprawnej wartości
providerName
):
-alias AIRCert -storetype pkcs11 -providerName tokenProviderName
Podpisywanie bez osadzania znacznika czasu:
-storetype pkcs12 -keystore cert.p12 -tsa none