Cos’è un profilo di provisioning e la firma del codice in iOS?

Fonte: Stackoverflow e internet 🤓.

La definizione di Apple: Un profilo di provisioning è un insieme di entità digitali che lega in modo univoco gli sviluppatori e i dispositivi a un team di sviluppo iPhone autorizzato e consente di utilizzare un dispositivo per i test.

A differenza di Android, non è possibile installare qualsiasi app su un dispositivo iOS. Deve essere prima firmata da Apple. Tuttavia, quando stai sviluppando un’app, probabilmente vuoi testarla prima di inviarla ad Apple per l’approvazione. Il profilo di provisioning funge da collegamento tra il dispositivo e l’account dello sviluppatore. Durante lo sviluppo, scegli quali dispositivi possono eseguire la tua app e a quali servizi di app la tua app può accedere. Un profilo di provisioning viene scaricato dal tuo account sviluppatore e incorporato nel bundle dell’app, e l’intero bundle è firmato in codice. Un profilo di provisioning di sviluppo deve essere installato su ogni dispositivo su cui desideri eseguire il codice della tua applicazione. Se le informazioni nel profilo di provisioning non corrispondono a certi criteri, la tua applicazione non verrà lanciata.

Ogni profilo di provisioning di sviluppo contiene:

  • Development Certificates – certificato di sviluppo. Questi sono per gli sviluppatori che vogliono testare l’applicazione su un dispositivo fisico mentre scrivono il codice.
  • Unique Device Identifiers (Elenco di dispositivi su cui l’applicazione può essere eseguita)
  • un App ID (questo può includere un * wild card per essere usato per molte applicazioni con bundle identifiers simili). – Un App ID è una stringa in due parti usata per identificare una o più applicazioni da un singolo team di sviluppo.

I dispositivi specificati all’interno del profilo di provisioning possono essere usati per i test solo da quegli individui i cui certificati di sviluppo iPhone sono inclusi nel profilo. 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, dall’immagine sopra, si può vedere che AppID è controllato, il certificato è convalidato, il Team è abbinato, le capacità e i diritti sono abbinati.

Se tutti i passaggi precedenti hanno successo, il binario firmato viene inviato al dispositivo e viene convalidato con lo stesso profilo di provisioning nell’app e infine lanciato. Se una di queste condizioni fallisce, allora l’app non si installerà – e vedrai un’icona dell’app in grigio.

La differenza tra i profili di sviluppo e di distribuzione è che i profili di distribuzione non specificano alcun ID dispositivo. Se vuoi rilasciare un’app che deve essere limitata a un certo numero di dispositivi registrati, devi usare un profilo Ad-Hoc per questo.

I Profili di distribuzione sono usati per inviare l’app all’App Store per la distribuzione. Dopo che l’app è stata esaminata da Apple, essi firmano l’app con la propria firma che può essere eseguita su qualsiasi dispositivo.

Questo va bene, ma cos’è la firma del codice?

La firma della tua app permette a iOS di identificare chi ha firmato la tua app e di verificare che la tua app non sia stata modificata da quando l’hai firmata. L’identità di firma consiste in una coppia di chiavi pubbliche e private che Apple crea per te.

Crittografia asimmetrica

La crittografia asimmetrica utilizza una chiave pubblica e una chiave privata. Gli utenti devono tenere la loro chiave privata per se stessi, ma possono condividere la chiave pubblica. E usando queste chiavi pubbliche e private, un utente può provare che è davvero se stesso.

Come funziona la crittografia asimmetrica??

Assumiamo che ci sia un UtenteA e un UtenteB .

  • L’UtenteA crea una ChiavePrivataA + ChiavePubblicaA.
  • L’utenteB crea una PrivateKeyB + PublicKeyB.

Per rendere sicura la comunicazione tra UtenteA e UtenteB,

  • UtenteA condivide la sua PublicKeyA con UtenteB .
  • 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. Contiene anche la chiave pubblica che sarà inclusa nel certificato. Una chiave privata viene solitamente creata nello stesso momento in cui si crea la CSR, creando una coppia di chiavi. Un’autorità di certificazione userà una CSR per creare il tuo certificato, ma non ha bisogno della tua chiave privata. Dovete tenere segreta la vostra chiave privata. Il certificato creato con una particolare CSR funzionerà solo con la chiave privata che è stata generata con essa. Quindi se perdi la chiave privata, il certificato non funzionerà più.

(opzionale – fai riferimento a questo link per capire come funziona la CSR per i certificati SSL. La procedura e il funzionamento sono quasi simili)

Il processo :

  • Creare un Certificate Signing Request (CSR) attraverso l’applicazione Keychain Access.
  • L’applicazione Keychain creerà un private key (la chiave privata sarà memorizzata nel portachiavi) e un certSigningRequest file che poi caricherete ad Apple. Il certificato conterrà il public key che potrà essere scaricato sul vostro sistema. Dopo averlo scaricato, è necessario inserirlo nell’applicazione Keychain Access facendo doppio clic su di esso. Il certificato verrà spinto nel Keychain e accoppiato con la chiave privata per formare il Code Signing Identity.
  • Infine, al momento dell’installazione dell’app, la chiave privata usata per firmare l’app corrisponde alla chiave pubblica nel certificato. Se fallisce, l’app non viene installata.

Questo è tutto.

Godetevi!!

Se vi è piaciuto leggere questo post, per favore condividetelo e date qualche clapps in modo che altri possano trovarlo 👏👏👏👏👏 !!!!

Potete seguirmi su Medium per articoli freschi. Inoltre, connettiti con me su LinkedIn e Twitter.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *