Wat is een provisioning profile & code signing in iOS?

Bron: Stackoverflow en internet 🤓.

Apple’s definitie: Een provisioning profile is een verzameling digitale entiteiten die ontwikkelaars en apparaten op unieke wijze koppelt aan een geautoriseerd iPhone Development Team en het mogelijk maakt om een apparaat te gebruiken voor testen.

In tegenstelling tot Android kun je niet elke app installeren op een iOS-apparaat. Die moet eerst door Apple worden ondertekend. Maar als je een app ontwikkelt, wil je die waarschijnlijk eerst testen voordat je hem naar Apple stuurt voor goedkeuring. Provisioning profile fungeert als een link tussen het apparaat en de ontwikkelaarsaccount. Tijdens de ontwikkeling kiest u welke apparaten uw app kunnen uitvoeren en tot welke app-diensten uw app toegang heeft. Een provisioning-profiel wordt gedownload van uw ontwikkelaarsaccount en opgenomen in de app-bundel, en de hele bundel is medeondertekend. Op elk apparaat waarop u uw applicatiecode wilt uitvoeren, moet een ontwikkelingsprovisioneringsprofiel worden geïnstalleerd. Als de informatie in het provisioning-profiel niet overeenkomt met bepaalde criteria, wordt uw app niet gestart.

Elk Development Provisioning Profile bevat:

  • Ontwikkelingscertificaten – ontwikkelingscertificaat. Deze zijn voor ontwikkelaars die de app op een fysiek apparaat willen testen terwijl ze code schrijven.
  • Unique Device Identifiers (lijst met apparaten waarop de app kan draaien)
  • een App ID (dit kan een * wild card bevatten om te worden gebruikt voor veel applicaties met vergelijkbare bundel-identifiers). – Een App ID is een tweedelige string die wordt gebruikt om een of meer apps van één ontwikkelteam te identificeren.

De apparaten die in het provisioning-profiel zijn gespecificeerd, kunnen alleen worden gebruikt voor testen door die personen van wie de iPhone Development Certificates in het profiel zijn opgenomen. 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, in de bovenstaande afbeelding kunt u zien dat AppID is gecontroleerd, certificaat is gevalideerd, Team is gematcht, capaciteiten en rechten zijn gematcht .

Als alle bovenstaande stappen zijn geslaagd, wordt het ondertekende binaire bestand naar het apparaat verzonden en wordt het met hetzelfde provisioneringsprofiel in de app gevalideerd en ten slotte gestart. Als een van deze voorwaarden faalt, dan wordt de app niet geïnstalleerd – en ziet u een grijs app-icoontje.

Het verschil tussen Ontwikkelings- en Distributieprofielen is dat Distributieprofielen geen apparaat-ID’s specificeren. Als u een app wilt uitbrengen die beperkt moet blijven tot een aantal geregistreerde apparaten, moet u daarvoor een Ad-Hoc profiel gebruiken.

Distributieprofielen worden gebruikt om apps in te dienen bij de App Store voor distributie. Nadat de app door apple is beoordeeld, ondertekenen zij de app met hun eigen handtekening die op elk apparaat kan worden uitgevoerd.

Dat is allemaal prima, maar wat is code signing?

Het ondertekenen van je app stelt iOS in staat om te identificeren wie je app heeft ondertekend en om te verifiëren dat je app niet is gewijzigd sinds je hem hebt ondertekend. De ondertekeningsidentiteit bestaat uit een openbaar-privésleutelpaar dat Apple voor u aanmaakt.

Asymmetrische cryptografie

Asymmetrische cryptografie maakt gebruik van een openbare sleutel en een privésleutel. De gebruikers moeten hun privésleutel voor zichzelf houden, maar ze kunnen de publieke sleutel delen. En met behulp van die publieke en private sleutel kan een gebruiker bewijzen dat hij inderdaad zichzelf is.

Hoe werkt asymmetrische cryptografie??

Aanname er is een UserA en UserB .

  • UserA maakt een PrivateKeyA + PublicKeyA.
  • GebruikerB maakt een PrivateKeyB + PublicKeyB.

Om de communicatie tussen UserA en UserB te beveiligen,

  • UserA deelt zijn PublicKeyA met 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. Het bevat ook de publieke sleutel die in het certificaat zal worden opgenomen. Een private sleutel wordt meestal gemaakt op hetzelfde moment dat u de CSR maakt, waardoor een sleutelpaar ontstaat. Een certificatieauthoriteit zal een CSR gebruiken om uw certificaat aan te maken, maar het heeft uw private key niet nodig. U moet uw private key geheim houden. Het certificaat dat met een bepaalde CSR is aangemaakt, werkt alleen met de private key die ermee is gegenereerd. Dus als u de private sleutel verliest, zal het certificaat niet langer werken.

(optioneel – raadpleeg deze link om te begrijpen hoe CSR werkt voor SSL-certificaten. De procedure en werking is bijna gelijk)

Het proces :

  • Maak een Certificate Signing Request (CSR) aan via de Keychain Access Application.
  • De Keychain-toepassing maakt een private key(privésleutel wordt opgeslagen in de sleutelhanger) en een certSigningRequest-bestand dat u vervolgens naar Apple uploadt.
  • Apple bewijst de aanvraag en geeft een certificaat voor u af. Het certificaat zal de public key bevatten die u naar uw systeem kunt downloaden. Nadat u het hebt gedownload, moet u het in uw Keychain Access Application plaatsen door erop te dubbelklikken. Het certificaat wordt in de Keychain geduwd en gekoppeld aan de private sleutel om de Code Signing Identity te vormen.
  • Ten slotte wordt bij de installatie van de app gecontroleerd of de voor het ondertekenen van de app gebruikte privésleutel overeenkomt met de openbare sleutel in het certificaat. Als dat niet het geval is, wordt de app niet geïnstalleerd.

Dat was het.

Enjoy!!

Als je dit bericht met plezier hebt gelezen, deel het dan en geef wat clapps zodat anderen het ook kunnen vinden 👏👏👏👏👏 !!!!

Je kunt me volgen op Medium voor verse artikelen. Je kunt ook contact met me opnemen op LinkedIn en Twitter.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *