Co to jest provisioning profile & code signing w iOS?

Źródło: Stackoverflow i internet 🤓.

Definicja Apple: Profil provisioningowy to zbiór bytów cyfrowych, które jednoznacznie wiążą deweloperów i urządzenia z autoryzowanym zespołem iPhone Development Team i umożliwiają wykorzystanie urządzenia do testów.

W przeciwieństwie do Androida, na urządzeniu z iOS nie można zainstalować dowolnej aplikacji. Musi ona najpierw zostać podpisana przez Apple. Jednak, gdy tworzysz aplikację, prawdopodobnie chcesz ją przetestować przed wysłaniem jej do Apple w celu zatwierdzenia. Profil Provisioning działa jako łącznik między urządzeniem a kontem deweloperskim. Podczas tworzenia aplikacji wybierasz, na których urządzeniach może działać Twoja aplikacja i do jakich usług aplikacji może mieć dostęp. Profil udostępniania jest pobierany z konta programisty i osadzany w pakiecie aplikacji, a cały pakiet jest podpisywany kodem. Na każdym urządzeniu, na którym ma być uruchamiany kod aplikacji, musi być zainstalowany profil udostępniania deweloperskiego. Jeśli informacje w profilu udostępniania nie spełniają określonych kryteriów, aplikacja nie zostanie uruchomiona.

Każdy profil Development Provisioning Profile będzie zawierał:

  • Development Certificates – certyfikat rozwojowy. Są one przeznaczone dla deweloperów, którzy chcą przetestować aplikację na fizycznym urządzeniu podczas pisania kodu.
  • Unique Device Identifiers (Lista urządzeń, na których aplikacja może działać)
  • App ID (może zawierać * wild card, aby być używane dla wielu aplikacji z podobnymi identyfikatorami pakietów). – App ID to dwuczęściowy ciąg znaków używany do identyfikacji jednej lub więcej aplikacji z jednego zespołu programistów.

Urządzenia określone w profilu zaopatrzenia mogą być używane do testowania tylko przez te osoby, których certyfikaty programisty iPhone’a są zawarte w profilu. A single device can contain multiple provisioning profiles.

So, What is happening when we connect the device to xcode and installs the app??

When you install the application on a device the following things happens:

  • the provisioning profile in the Mac goes to the developer certificate in your key chain.
  • xcode uses the certificate to sign the code.
  • device’s UUID is matched with the IDs in the provisioning profile.
  • AppID in the provisioning profile is matched with the bundle identifier in the app.
  • The entitlements required are associated with the App ID.
  • The private key used to sign the app matches the public key in the certificate.

Here is a screenshot from xcode signing section:

SO, z powyższego obrazka widać, że AppID jest sprawdzany, certyfikat jest walidowany, zespół jest dopasowywany, możliwości i uprawnienia są dopasowywane.

Jeśli wszystkie powyższe kroki są udane, podpisany plik binarny jest wysyłany do urządzenia i jest sprawdzany pod kątem tego samego profilu w aplikacji, a następnie uruchamiany. Jeśli którykolwiek z tych warunków nie powiedzie się, aplikacja nie zainstaluje się – i zobaczysz wyszarzoną ikonę aplikacji.

Różnica między profilami deweloperskimi a dystrybucyjnymi jest taka, że profile dystrybucyjne nie określają żadnych identyfikatorów urządzeń. Jeśli chcesz wydać aplikację, która powinna być ograniczona do pewnej liczby zarejestrowanych urządzeń, musisz użyć do tego profilu Ad-Hoc.

Profile Dystrybucyjne są używane do wysyłania aplikacji do App Store w celu dystrybucji. Po przejrzeniu aplikacji przez apple podpisuje się ją własnym podpisem, który można uruchomić na dowolnym urządzeniu.

To wszystko jest w porządku, ale co to jest podpisywanie kodu?

Podpisywanie aplikacji pozwala iOS zidentyfikować, kto podpisał aplikację i zweryfikować, że aplikacja nie została zmodyfikowana od czasu podpisania. Tożsamość podpisującego składa się z pary klucz publiczny-prywatny, którą Apple tworzy dla Ciebie.

Kryptografia asymetryczna

Kryptografia asymetryczna wykorzystuje klucz publiczny i klucz prywatny. Użytkownicy muszą zachować swój klucz prywatny dla siebie, ale mogą dzielić się kluczem publicznym. Używając klucza publicznego i prywatnego, użytkownik może udowodnić, że jest sobą.

Jak działa kryptografia asymetryczna??

Załóżmy, że istnieje UżytkownikA i UżytkownikB .

  • UżytkownikA tworzy klucz prywatnyA + klucz publicznyA.
  • UżytkownikB tworzy PrivateKeyB + PublicKeyB.

Aby zabezpieczyć komunikację między UserA i UserB,

  • UżytkownikA dzieli się swoim PublicKeyA z UserB .
  • UserB shares his PublicKeyB with UserA.

… and both users keep the private key with themselves.

When UserA sends a message to UserB,

  • UserA encrypts the message with UserB’s PublicKeyB and send the message.
  • This message can only be decrypted using UserB’s PrivateKeyB.

… The same thing happens when the UserB sends a message to UserA.

Watch this video for more understanding about asymmetric cryptography : Youtube video by savjee.

What is CSR(Certificate Signing Request) in iOS ??

CSR is not something that is used only in iOS. It is used in many places.

A CSR or Certificate Signing request is a block of encoded text that is given to a Certificate Authority when applying for a certificate.

Here , we create a CSR and give it to apple which will create the certificate for you. Zawiera on również klucz publiczny, który będzie zawarty w certyfikacie. Klucz prywatny jest zazwyczaj tworzony w tym samym czasie, w którym tworzymy CSR, tworząc parę kluczy. Urząd certyfikacji użyje CSR do utworzenia Twojego certyfikatu, ale nie będzie potrzebował Twojego klucza prywatnego. Musisz zachować swój klucz prywatny w tajemnicy. Certyfikat utworzony za pomocą danego CSR będzie działał tylko z kluczem prywatnym, który został wygenerowany za jego pomocą. Jeśli więc stracisz klucz prywatny, certyfikat nie będzie działał.

(opcjonalnie – zapoznaj się z tym linkiem, aby zrozumieć, jak działa CSR dla certyfikatów SSL. Procedura i działanie jest prawie podobne)

Proces :

  • Utwórz Certificate Signing Request (CSR) poprzez aplikację Keychain Access.
  • Aplikacja Keychain utworzy private key(klucz prywatny będzie przechowywany w keychain) i certSigningRequest plik, który następnie prześlesz do Apple.
  • Apple potwierdzi żądanie i wyda certyfikat dla Ciebie. Certyfikat będzie zawierał plik public key, który można pobrać do systemu. Po pobraniu certyfikatu należy umieścić go w aplikacji Keychain Access klikając na niego dwukrotnie. Certyfikat zostanie umieszczony w Keychain i sparowany z kluczem prywatnym, aby utworzyć Code Signing Identity.
  • Wreszcie, w czasie instalacji aplikacji, klucz prywatny użyty do podpisania aplikacji jest zgodny z kluczem publicznym w certyfikacie. Jeśli to się nie uda, aplikacja nie zostanie zainstalowana.

To wszystko. Ciesz się!!!

Jeśli podobało Ci się czytanie tego posta, proszę podziel się i daj kilka klapsów, aby inni mogli go znaleźć 👏👏👏👏👏 !!!!

Możesz śledzić mnie na Medium po świeże artykuły. Połącz się ze mną również na LinkedIn i Twitterze.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *