Czym są tożsamości podpisywania kodu?

Co to są "tożsamości podpisywania kodu" w XCode?

Czy są to certyfikaty?

Czy to klucze prywatne?

Czy to identyfikatory aplikacji?

Czy są to profile provisioning?

Jeśli przejdę do ustawień budowania docelowego, zapyta o tożsamość podpisywania kodu, więc muszę to rozgryźć.

Myślałem, że podpisaliśmy kod naszym kluczem prywatnym. Żadne z moich kluczy prywatnych nie pojawia się jednak. Pokazuje listę certyfikatów (myślę, że nie jestem nawet jasne.)

 51
Author: Kaitlin Duck Sherwood, 2013-04-14

1 answers

Zdecydowanie trafiłeś na temat, który bardzo szybko staje się bardzo głęboki i jest częstym źródłem bólów głowy podczas próby tworzenia kompilacji urządzeń z aplikacji iOS. Po pierwsze, pozwól mi umieścić trochę struktury wokół każdego z terminów zaangażowanych w proces znakowania kodu (zarówno dla Ciebie, jak i każdego, kto natknie się na to pytanie później), a następnie możemy przejść do twojego głównego pytania:

Terminologia CodeSign

Faza znakowania kodu Urządzenia z systemem iOS jest procesem, w którym podpisuj kryptograficznie i zabezpieczaj określone rozmieszczenie danych w aplikacji, w tym samą aplikację wykonywalną binarną, wszelkie osadzone zasoby multimedialne (takie jak tekstury przycisków, niestandardowe grafiki, czcionki itp.), oraz zestaw metadanych dotyczących naszej aplikacji i stanowi unikalny "odcisk kciuka" danych naszej aplikacji. Ten odcisk kciuka jest używany przez Apple i iOS, aby zapewnić, że nasze aplikacje nie są manipulowane podczas dostarczania do urządzeń użytkownika lub podczas uruchamiania na urządzeniach Użytkownika Urządzenia z systemem iOS. Aby było to możliwe, programiści muszą zarejestrować się w firmie Apple, skonfigurować identyfikator aplikacji, zażądać certyfikatów rozwoju i dystrybucji, zarejestrować zestaw urządzeń testowych i wreszcie zażądać profilu Aprowizacji dla swoich prac rozwojowych. Rola każdego z tych elementów jest następująca:

  • App Identifier (lub AppID) - odwrócony ciąg znaków w stylu DNS, który jednoznacznie identyfikuje dokładnie jedną aplikację na iOS w AppStore.
  • rozwój i certyfikaty dystrybucji - są to dokumenty cyfrowe podpisane kryptograficznie przez Apple, poświadczające tożsamość osoby, której dokumenty zostały wydane. Dla osób zaznajomionych z infrastrukturą klucza publicznego sam certyfikat zawiera klucz publiczny, który można wykorzystać do weryfikacji integralności podpisów na późniejszym etapie procesu.
  • urządzenia testowe - jedynymi zatwierdzonymi standardowymi kanałami dystrybucji oprogramowania iOS są AppStore. Rejestrując test urządzenia, programiści mogą obejść AppStore i zainstalować oprogramowanie bezpośrednio na urządzeniach w celach rozwojowych i testowych. Łączna liczba urządzeń testowych dozwolona w danym roku członkostwa to 100 urządzeń testowych.
  • Provisioning Profile - dokument zawierający trzy główne składniki: 1) dokładnie jeden identyfikator aplikacji, 2) jeden lub więcej certyfikatów deweloperów iOS oraz 3) Zero lub więcej zarejestrowanych urządzeń testowych, na których może być bezpośrednio zainstalowana nazwana aplikacja iOS. Zawartość tej dokumenty są podpisywane kryptograficznie przez firmę Apple, aby upewnić się, że ich zawartość nie może zostać naruszona.

To obecność tego pliku i sprawdzanie odcisku kciuka określa, czy aplikacja wygenerowana przez dewelopera może być zainstalowana na urządzeniu, ponieważ zawiera pojęcie " kto "(certyfikaty), " co "(AppID) i "gdzie" (Które urządzenia).

Świetnie, mam...A co z tą tożsamością?

W kontekście indywidualnego budowania celu ustawienia kompilacji, termin code sign Identity odnosi się do wspólnej nazwy certyfikatów zainstalowanych w Pęku Kluczy Maszyny programisty. W ustawieniu kompilacji Xcode pojawia się jako lista opcji, z których programiści muszą wybrać tożsamość do użycia dla CodeSign - w każdej sekcji tego menu znajduje się Wiele informacji zakodowanych:

Xcode Code Sign Identity

Patrząc najpierw na czarny tekst-z obrazka powyżej ' iPhone Developer: Bryan Musial (XXXXXXXXXX) ' - jest to tak naprawdę podstawowy element Xcode używany do znajdowania kluczy publicznych i prywatnych używanych do kodowania znaku. Wybierając ten element, poinstruowujesz Xcode, aby dotrzeć do pęku kluczy i spróbować znaleźć certyfikat, którego pole "Nazwa wspólna" pasuje do tego ciągu, a następnie chwycić ten certyfikat (który zawiera klucz publiczny) i powiązany klucz prywatny do użycia w operacji znak kodu.

Aby być dokładnym, jeśli otworzysz dostęp do pęku kluczy i dwukrotnie klikniesz dowolny z " iPhone Rozwój: ...'lub' dystrybucja iPhone ' a: ...'certificates pokazuje programistom wszystkie informacje zakodowane w wydaniach certyfikatów Apple. Jeśli miałbym wybrać wpis na pierwszym obrazku, Xcode sięgnie do mojego pęku kluczy i odciągnie ten certyfikat (Uwaga: unikalne dane identyfikacyjne zostały X ' D lub zmienione):

Przykład Nazwy Zwyczajowej Pęku Kluczy

Jak widać, czarny tekst z zaznaczenia Xcode dokładnie pasuje do pola Common Name w moim certyfikacie, więc Xcode wycofa ten certyfikat i powiązany z nim klucz prywatny do wykorzystania w podpisywaniu kodów w mojej aplikacji.

Patrząc wstecz na ustawienia Xcode ponownie, zauważamy również, że jest więcej tekstu w tym wyborze menu, jak również-jaśniejszy szary tekst identyfikuje profil Aprowizacji, który będzie wbudowany w aplikacji. W przypadku mojego przykładowego ustawienia, Xcode pójdzie i uzyskać Provisioning profil "MyiOSApp Testing" który ma swój AppID ustawiony na ' com.myiosapp.*'. Xcode jest bardzo chciwy z przechowywania Provisioning Na szczęście Organizer zapewnia świetne miejsce do przejrzenia zainstalowanych profili obsługi i zapoznania się z podstawowymi danymi, które zawierają. Ponownie Dla tożsamości znaku kodowego Xcode na pierwszym obrazku powiązany profil udostępniania w moim organizerze wyglądałby następująco:

Profil Organizatora

Kolumna "Nazwa" i tylny koniec kolumny Identyfikatora aplikacji pasują do jasnoszarego tekstu z mojego ustawienia Xcode, więc jest to Profil obsługi, który otrzymałby wybrany do użycia podczas podpisywania kodu. Ważne jest również, aby zwrócić uwagę na kolumnę "Status" na końcu wiersza. W tym przypadku jest zielony i oznacza "poprawny profil". Oznacza to, że mój Pęk kluczy ma zarówno klucze publiczne, jak i prywatne dla co najmniej jednego z certyfikatów zakodowanych w tym profilu Aprowizacji. Jeśli ten status jest inny niż zielony, to występuje problem z bieżącą konfiguracją kluczy publicznych / prywatnych i / lub profilem Provisioning -- Code Signing nie może działać, chyba że Profil Provisioning, którego próbujesz użyć, ma status Zielony. Inne możliwe opcje statusu to:

Opcje Statusu Aprowizacji Organizatora

  • nie znaleziono poprawnej tożsamości podpisu: nie masz zarówno klucza publicznego, jak i prywatnego dla co najmniej jednego z certyfikatów zakodowanych w tym profilu Aprowizacji. Usuń profil z organizera, a następnie wróć do Narzędzia certyfikaty, identyfikatory i profile developer.apple.com/ios i upewnij się, że masz dołączony certyfikat rozwoju w profilu Provisioning. Zweryfikuj certyfikat w Keychain Access nie wygasł ani nie został odwołany, a klucz prywatny jest powiązany z certyfikatem klucza publicznego.
  • profil wygasł: upłynął termin wygaśnięcia profilu tworzenia. Usuń ten profil aprowizacji z organizera, a następnie przejdź ponownie do Narzędzia certyfikaty, identyfikatory i profile developer.apple.com/ios i ponownie opublikować ten profil Provisioning (jeśli jest nadal potrzebny)

Inne przedmioty, które mogą Cię potknąć

Oprócz wszystkich niuansów dotyczących upewniania się, że masz zainstalowane zarówno klucze publiczne, jak i prywatne oraz że profile obsługi są ustawione prawidłowo, istnieje kilka innych rzeczy, które mogą zaskoczyć programistów. Po pierwsze, Xcode zbiera profile obsługi i zawiesza się na nich, dopóki nie każesz mu ich usunąć. Teoretycznie nie jest to wielka sprawa, z wyjątkiem scenariuszy, w których wprowadzasz zmiany w profilu Provisioning, POBiERASZ i instalujesz nowszy wersja. Wiele razy Xcode będzie chwycić odpowiedni profil, ale czasami nie dostać to dobrze i będziesz spędzać godziny patrząc na certyfikaty, identyfikatory i narzędzia Profile, jak również pęku kluczy, aby spróbować i dowiedzieć się, co się dzieje.

Sugestia 1: podczas instalowania nowszej wersji profilu Provisioning, Usuń starsze, aby Xcode nie znalazł się w sytuacji, w której może być konieczne podjęcie decyzji.

Podobna rzecz może się zdarzyć, jeśli ponownie wydasz Development or Distribution Certificate -- większość razy Xcode uruchomi ostrzeżenie podczas kompilacji o niejednoznacznym certyfikacie.

Sugestia 2: zwróć uwagę na niejednoznaczne ostrzeżenia podczas budowania. Oznacza to, że masz stary certyfikat, który spełnia kryteria budowania i może być nieumyślnie użyty, potencjalnie powodując problem z kompilacją.

Sugestia 3: za każdym razem, gdy jesteś w Pęku Kluczy i zajmujesz się certyfikatami, poszukaj "iPhone Deweloper: ...'lub' dystrybucja iPhone ' a: ..."certyfikaty, które mają czerwone" X " na nich. Jest to wskaźnik, że certyfikat wygasł lub został cofnięty. Tak czy inaczej, ten klucz publiczny (i potencjalnie powiązany klucz prywatny) nie jest już używany do celów kompilacji i może zostać usunięty.

Wreszcie, ustawienie tożsamości znaku kodowego ma również opcję, która wyświetla się jako "automatyczny Selektor profilu". W wielu przypadkach będziesz chciał skorzystać z tej opcji, ponieważ dołoży ona wszelkich starań, aby automatycznie poszukaj swojego AppID w Ustawieniach obiektu docelowego kompilacji, poszukaj profilu AppID, który pasuje do tego AppId i zawiera certyfikaty, do których masz zarówno klucz publiczny, jak i prywatny. W niektórych niestandardowych okolicznościach może nie być możliwe użycie tej opcji i będziesz musiał użyć jednej ze stałych, określonych opcji, takich jak moje ustawienie demonstracyjne na pierwszym obrazie. Pamiętaj, jeśli wybierzesz opcję stałą - za każdym razem, gdy zaktualizujesz profil Provisioning, będziesz musiał również zaktualizować Ustawienie budowania tożsamości podpisywania kodu w celu dopasowania do nowszej wersji.

Najważniejsze Wiadomości

  • upewnij się, że listy profilu obsługi pęku kluczy i Xcode są czyste i deduplikowane.
  • Po zainstalowaniu certyfikatu i profilu Aprowizacji upewnij się, że organizator zgłosi status profilu aprowizacji jako zielony ("poprawny profil"). Każdy inny stan wskazuje, że istnieje problem między pękiem kluczy a profilem aprowizacji, który należy rozwiązać zanim w ogóle rozważysz uruchomienie kompilacji.
  • spróbuj użyć 'automatycznego selektora profilu'. Twoi koledzy z zespołu i wszelkie zautomatyzowane systemy budowania będą z Tobą zadowoleni, jeśli oni również nie będą musieli myśleć o ustawieniach tożsamości Code Sign.
  • Jeśli nie możesz użyć automatycznego selektora profilu, upewnij się, że konfiguracja jest zawsze aktualna, ponieważ wykonywane są nowsze wersje profilu obsługi.

Powodzenia w konfiguracji build, i proszę dać mi znać, jeśli masz inne pytania!

 123
Author: Bryan Musial,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-04 14:06:21