web-dev-qa-db-fra.com

Que sont les identités de signature de code?

Que sont les "identités de signature de code" dans XCode?

S'agit-il des certificats?

S'agit-il des clés privées?

S'agit-il des identifiants de l'application?

S'agit-il des profils d'approvisionnement?

Si je vais dans les paramètres de construction cibles, il demande l'identité de signature de code, donc je dois le comprendre.

Je pensais que nous avions signé le code en utilisant notre clé privée. Cependant, aucun de mes noms de clé privée n'apparaît. Il montre une liste de certificats (je pense, même si je ne suis même pas sûr.)

54
user4951

Vous avez certainement abordé un sujet qui s'approfondit très rapidement et qui est une source fréquente de maux de tête lorsque vous essayez de créer des builds d'appareil d'applications iOS. Tout d'abord, permettez-moi de mettre un peu de structure autour de chacun des termes impliqués dans le processus de signature de code (à la fois pour vous et pour toute personne tombant sur cette question plus tard), puis nous pourrons passer à votre question principale:

Terminologie CodeSign

La phase de signature de code d'une construction d'appareil iOS est le processus par lequel nous signons et sécurisons de manière cryptographique un arrangement spécifique de données dans une application, y compris le binaire exécutable de l'application elle-même, tous les actifs multimédias intégrés (comme les textures des boutons, les illustrations personnalisées, les polices, etc. ) et un ensemble de métadonnées sur notre application et représentent une "empreinte numérique" unique des données de notre application. Cette empreinte numérique est utilisée par Apple et iOS pour aider à garantir que nos applications ne sont pas altérées lors de leur livraison sur les appareils de l'utilisateur ou lors de leur exécution sur les appareils iOS de l'utilisateur. Pour ce faire, les développeurs sont requis pour s'inscrire auprès d'Apple, configurer un identifiant d'application, demander des certificats de développement et de distribution, enregistrer un ensemble de périphériques de test et enfin demander un profil d'approvisionnement pour leurs efforts de développement. Le rôle de chacun de ces éléments est le suivant:

  • App Identifier (ou AppID) - Une chaîne de style DNS inverse qui identifie de manière unique exactement une application iOS sur l'AppStore.
  • Certificats de développement et de distribution - Il s'agit de documents numériques signés cryptographiquement par Apple certifiant l'identité de la personne à laquelle les documents ont été délivrés. Pour ceux qui connaissent l'infrastructure à clé publique, le certificat lui-même contient une clé publique qui peut être utilisée pour vérifier l'intégrité des signatures plus tard dans le processus.
  • Test Devices - Les seuls canaux de distribution standard approuvés pour les logiciels iOS sont via l'AppStore. En enregistrant un appareil de test, les développeurs peuvent contourner l'AppStore et installer le logiciel directement sur les appareils à des fins de développement et de test. Le nombre total d'appareils de test autorisés au cours d'une année d'adhésion donnée est de 100 appareils de test.
  • Profil d'approvisionnement - Un document contenant trois composants principaux: 1) Exactement un ID d'application, 2) Un ou plusieurs certificats de développeur iOS et 3) Zéro ou plusieurs appareils de test enregistrés sur lesquels l'application iOS nommée peut être directement installé. Le contenu de ce document est signé cryptographiquement par Apple pour garantir que son contenu ne peut pas être altéré.

C'est la présence de ce fichier et les vérifications d'empreintes digitales qui déterminent si une application générée par le développeur peut être installée sur l'appareil car elle contient la notion de "qui" (certificats), de "quoi" (AppID) et de "où '(quels appareils).

Génial, je l'ai compris ... Maintenant, qu'en est-il de cette chose d'identité de code?

Dans le contexte des paramètres de génération d'une cible de génération individuelle, le terme Identité du signe de code fait référence au nom commun des certificats installés dans le trousseau de la machine du développeur. Dans le paramètre de construction Xcode, il apparaît comme une liste d'options parmi lesquelles les développeurs doivent sélectionner une identité à utiliser pour CodeSign - il y a beaucoup d'informations codées dans chaque section de ce menu:

Xcode Code Sign Identity

En regardant d'abord le texte noir - De l'image ci-dessus `` Développeur iPhone: Bryan Musial (XXXXXXXXXX) '' - C'est vraiment l'élément principal que Xcode utilise pour trouver les clés publiques et privées utilisées pour coder le signe. Lorsque vous sélectionnez cet élément, vous demandez à Xcode d'accéder à votre trousseau et d'essayer de trouver un certificat dont le champ `` Nom commun '' correspond à cette chaîne, puis de saisir ce certificat (qui contient la clé publique) et la clé privée associée à utiliser dans le Opération de signe de code.

Juste pour être minutieux si vous ouvrez l'accès au trousseau et double-cliquez sur l'un des certificats "Développement iPhone: ..." ou "Distribution iPhone: ..." affiche toutes les informations encodées dans les certificats Apple problèmes pour ses développeurs. Si je sélectionnais l'entrée dans la première image, Xcode atteindrait mon trousseau et retirerait ce certificat (REMARQUE: des détails d'identification uniques ont été modifiés ou modifiés):

Keychain Certificate Common Name Example

Comme vous pouvez le voir, le texte noir de la sélection Xcode correspond exactement au champ Nom commun de mon certificat, donc Xcode retirerait ce certificat et sa clé privée liée pour l'utiliser dans les codes signant mon application.

En regardant à nouveau le paramètre Xcode, nous remarquons également qu'il y a plus de texte dans cette sélection de menu - le texte gris plus clair identifie le profil d'approvisionnement qui sera intégré à l'application. Dans le cas de mon exemple de paramètre, Xcode ira chercher le profil de provisionnement "MyiOSApp Testing" qui a son AppID défini sur "com.myiosapp. *". Xcode est très gourmand avec le stockage des profils de provisioning, et heureusement, Organizer vous offre un excellent endroit pour parcourir les profils de provisioning installés et avoir une idée des données de base qu'ils contiennent. Encore une fois pour l'identité de signe de code Xcode dans la première image, le profil d'approvisionnement associé dans mon organiseur ressemblerait à ceci:

Organizer Provisioning Profile

La colonne `` Nom '' et l'extrémité arrière de la colonne Identifiant d'application correspondent au texte gris clair de mon paramètre Xcode, c'est donc le profil d'approvisionnement qui sera sélectionné pour être utilisé pendant la signature de code. Il est également important de noter la colonne "Statut" à la fin de la ligne. Dans ce cas, il est vert et indique "Profil valide". Cela signifie que mon trousseau possède à la fois les clés publiques et privées pour au moins l'un des certificats codés dans ce profil d'approvisionnement. Si cet état est autre que vert, il y a un problème avec votre configuration actuelle de clés publiques/privées et/ou le profil d'approvisionnement - La signature de code ne peut fonctionner que si le profil d'approvisionnement que vous essayez d'utiliser a son état défini sur Vert . Les autres options de statut possibles incluent:

Organizer Provisioning Status Options

  • Identité de signature valide introuvable: Vous n'avez pas à la fois la clé publique et la clé privée pour au moins un des certificats codés dans ce profil d'approvisionnement. Supprimez le profil de l'Organiseur, puis revenez à l'outil Certificats, identificateurs et profils sur developer.Apple.com/ios et assurez-vous que votre certificat de développement est inclus dans le profil d'approvisionnement. Vérifiez que votre certificat dans Keychain Access n'est pas expiré ou révoqué et possède une clé privée liée au certificat de clé publique.
  • Le profil a expiré: La date d'expiration du profil d'approvisionnement a expiré. Supprimez ce profil d'approvisionnement de l'organisateur, puis revisitez l'outil Certificats, identificateurs et profils sur developer.Apple.com/ios et réémettez ce profil d'approvisionnement (s'il est en fait toujours nécessaire)

Autres articles qui peuvent vous trébucher

En plus de toutes les nuances pour vous assurer que les clés publiques et privées sont installées et que les profils de provisioning sont définis correctement, il y a quelques autres choses qui peuvent déclencher les développeurs. Tout d'abord, Xcode collecte les profils de provisioning et s'y accroche jusqu'à ce que vous lui demandiez de les supprimer. En théorie, ce n'est pas une affaire énorme, sauf dans les scénarios où vous apportez des modifications à un profil de provisioning, téléchargez et installez une version plus récente. Plusieurs fois, Xcode saisira le bon profil, mais parfois il ne le fait pas correctement et vous passerez des heures à parcourir l'outil Certificats, Identifiants et Profils ainsi que votre trousseau pour essayer d'avoir une idée de ce qui se passe.

Suggestion 1: Lors de l'installation d'une version plus récente d'un profil de provisioning, supprimez les plus anciennes afin que Xcode ne soit pas placé dans une position où il pourrait avoir à prendre une décision.

Une chose similaire peut se produire si vous réémettez un certificat de développement ou de distribution - La plupart du temps, Xcode déclenchera un avertissement lors de la génération d'un certificat ambigu.

Suggestion 2: Faites attention aux avertissements d'ambiguïté lors de la construction. Cela implique que vous avez un ancien certificat flottant qui répond aux critères de construction et pourrait être utilisé par inadvertance, ce qui pourrait provoquer un problème de construction.

Suggestion 3: Chaque fois que vous êtes dans le trousseau traitant de vos certificats, recherchez les certificats 'iPhone Developer: ...' ou 'iPhone Distribution: ...' qui ont un 'X' rouge dessus. Il s'agit d'un indicateur que le certificat a expiré ou a été révoqué. Quoi qu'il en soit, cette clé publique (et la clé privée potentiellement liée) ne vous est plus utile à des fins de génération et peut être supprimée.

Enfin, le paramètre Identité du signe de code dispose également d'une option répertoriée comme "Sélecteur de profil automatique". Dans de nombreux cas, vous souhaiterez utiliser cette option car elle fera de son mieux pour rechercher automatiquement votre AppID à partir des paramètres de votre cible de génération, recherchez un profil d'approvisionnement qui correspond à cet AppId et contient des certificats pour lesquels vous disposez à la fois d'une clé publique et privée. . Dans certaines circonstances de construction personnalisée, il peut ne pas être possible d'utiliser cette option et vous devrez utiliser l'une des options fixes spécifiques, comme mon paramètre de démonstration dans la première image. Soyez avisé si vous optez pour une option fixe - chaque fois que vous mettez à jour le profil d'approvisionnement, vous devrez également mettre à jour le paramètre de génération Identité de signature de code pour correspondre à la version la plus récente.

Points clés à retenir

  • Assurez-vous de garder vos listes de trousseau et de profil de provisionnement Xcode propres et dédupliquées.
  • Après avoir installé un certificat et un profil d'approvisionnement, assurez-vous que l'organisateur signale l'état de ce profil d'approvisionnement comme vert ("profil valide"). Tout autre état indique qu'il existe un problème entre votre trousseau et votre profil d'approvisionnement qui doit être résolu avant même d'envisager d'exécuter une génération.
  • Essayez d'utiliser le "Sélecteur de profil automatique". Vos coéquipiers et tous les systèmes de construction automatisés seront plus heureux avec vous s'ils n'ont pas non plus à penser aux paramètres d'identité du code.
  • Si vous ne pouvez pas utiliser le sélecteur de profil automatique, assurez-vous de toujours mettre à jour cette configuration lorsque de nouvelles itérations de votre profil d'approvisionnement sont effectuées.

Bonne chance avec votre configuration de construction, et faites-moi savoir si vous avez d'autres questions de suivi!

129
Bryan Musial