Opcje podpisywania kodu ADT

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.

Uwaga: Narzędzie ADT korzysta w razie potrzeby z ustawień proxy środowiska JRE (Java Runtime Environment), aby nawiązywać połączenia z zasobami internetowymi w celu sprawdzania list unieważnienia certyfikatów oraz pobierania znaczników czasu. W razie problemów z połączeniem z tymi zasobami internetowymi — podczas korzystania z narzędzia ADT oraz wtedy, gdy sieć wymaga specjalnych ustawień proxy — konieczne może być skonfigurowanie ustawień proxy środowiska JRE.

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