web-dev-qa-db-fra.com

codesign ne donne toujours aucune erreur d'identité trouvée via le terminal

J'ai parcouru des questions déjà existantes, mais aucune n'a résolu mes problèmes (comme la recréation de certificats). J'ai construit une application où, à l'intérieur de l'application, j'ai peu d'exécutables, de dossiers et de frameworks. Chaque fois que j'essaie de faire du code -s "notre identité" my.app ne donne toujours aucune identité trouvée. Quelqu'un peut-il donner un processus étape par étape de cela.

codesign -s "Developer ID Application: Sai***** (123123123J)" out/Release/Sai.app

Erreur

Developer ID Application: Sai****** (123123123J): no identity found,

J'ai essayé de supprimer "Developer ID Application" et le numéro de série, mais tout donne la même erreur

Vous cherchez de l'aide dans ces lignes

Je vous remercie

34
Saikrishna

alors que je ne l'ai pas fait pour Apple, je pense toujours avoir des informations utiles à l'intérieur qui pourraient vous aider à déboguer un tel problème. La différence est que j'ai créé mon propre certificat pendant que vous obtenez un d'Apple.

Vérifiez la confiance du certificat, il doit être approuvé pour la signature de code (sur yosemite qui est l'avant-dernier dans la section de confiance de la vue cert dans l'accès au trousseau). Sachez que pour votre signature de code, le certificat doit être dans le trousseau de connexion, j'en avais besoin dans le trousseau système.

Au début, le certificat n'était pas connu pour la signature de codes avec le trousseau, car il manquait le but d'extension "Signature de code", vous pouvez le trouver si vous regardez dans le trousseau et double-cliquez sur le certificat:

enter image description here

J'ai corrigé cela (vous ne pouvez pas le réparer comme Apple vous fournit le certificat. L'extension devrait juste être là)):

enter image description here

Ensuite, j'ai ajouté le certificat aux certificats de signature de confiance, après avoir fait glisser et déposé le certificat du trousseau sur mon bureau, ce qui a créé le ~/Desktop/gdb-cert.cer (sachez que vous pouvez omettre -d et -r trustRoot:

$ Sudo security add-trusted-cert -d -r trustRoot -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer

C'était un peu délicat car j'ai été induit en erreur par certaines publications Internet et je n'ai pas consulté la page de manuel. Certains ont dit que vous devriez utiliser add-trust ( https://llvm.org/svn/llvm-project/lldb/trunk/docs/code-signing.txt ). Le plus terrible, c'est que la commande a réussi, mais n'a pas fait ce qu'elle devait.

Après cela, j'ai trouvé le nouveau certificat dans les certificats de confiance comme suit:

$ security find-identity -p codesigning

Policy: Code Signing
  Matching identities
      1) E7419032D4..... "Mac Developer: FirstName LastName (K2Q869SWUE)"    (CSSMERR_TP_CERT_EXPIRED)
      2) ACD43B6... "gdb-cert"
  2 identities found

  Valid identities only
      1) ACD43... "gdb-cert"
  1 valid identities found

Dans mon cas, le certificat Apple Apple a expiré, mais celui que j'utilisais pour signer gdb ne l'était pas (enfin, je l'ai créé moi-même). Sachez également que la stratégie est nommée différemment pour le "security add-trusted-cert" (- p codeSign) et la commande "security find-identity" (-p codesigning). J'ai ensuite signé gdb et j'ai toujours obtenu:

$ codesign --sign gdb-cert.cer --keychain ~/Library/Keychains/login.keychain `which gdb`
  gdb-cert.cer: no identity found

parce que j'avais l'impression que je devais donner le nom de fichier du fichier cert à l'option --sign, mais que c'était en fait le CN du certificat que j'aurais dû fournir et que je devrais être dans le magasin de confiance. Vous pouvez trouver le CN ici en double-cliquant sur le certificat dans le trousseau:

enter image description here

ou dans la sortie ci-dessus de "security find-identity -p codesigning". Ensuite, j'ai continué à signer et j'ai dû lui donner le bon porte-clés. Dans votre cas, cela devrait être le ~/Library/Keychains/login.keychain, dans mon cas le System.keychain:

 codesign -s gdb-cert --keychain /Library/Keychains/System.keychain `which gdb` 

Cela m'a ensuite donné un gdb fonctionnel et cela devrait vous donner une demande signée.

22
user637338

J'ai également eu des problèmes avec cela. Vérifiez que votre identité de signature de code se trouve dans votre trousseau et vous pourriez envisager d'utiliser l'empreinte SHA-1 au lieu du nom après le -s.

Vous pouvez trouver l'empreinte SHA-1 en ouvrant Keychain Access et en sélectionnant votre Developer ID Application: FOO certificat, puis en choisissant Obtenir des informations . À partir d'ici, faites défiler jusqu'au bas des informations jusqu'à ce que vous atteigniez Empreintes digitales . L'empreinte digitale SHA-1 ici peut être copiée et vous devrez supprimer tous les espaces, mais après cela, vous aurez un identifiant de 40 caractères qui sera approprié pour être placé après le -s dans votre déclaration de code.

Si vous rencontrez toujours des problèmes pour localiser la clé, essayez ce qui suit à partir du terminal:

certtool y | grep Developer\ ID

et cherchez n'importe quoi avec Developer ID Application dans le Common Name pour vérifier que le certificat se trouve bien dans un trousseau accessible à partir du terminal. Si vous ne voyez rien en réponse, cela indiquerait que le trousseau contenant vos informations d'identification n'est pas disponible pour votre session Terminal. Les raisons pourraient inclure des choses comme le trousseau verrouillé, le shell s'exécutant en tant qu'un autre utilisateur, exécutant la commande avec différentes autorisations (telles que Sudo).

Après avoir exécuté la commande ci-dessus, vous devriez avoir au minimum les éléments suivants:

Developer ID Application: <your company name>
Developer ID Installer: <your company name>
Developer ID Certification Authority

Si vous n'avez pas les trois, vous devriez aller télécharger les éléments manquants. Bien que vous ne puissiez pas actuellement besoin pour construire un programme d'installation, il n'y a aucun mal à l'avoir autour. Les éléments Application et Installer peuvent être téléchargés à partir de la section Certificats Mac de la Certificats, identificateurs et profils onglet sur le site développeur d'Apple . Vous devriez y avoir des listes qui ne sont pas expirées. Vous pouvez également avoir des listes qui ont expiré. Pour installer les certificats dans votre trousseau:

  1. Accédez au site des développeurs Apple
  2. Accéder au Mac Dev Center
  3. Accès Lien Certificats, Identifiants & Profils
  4. Téléchargez les certificats depuis le portail
  5. Double-cliquez sur les certificats et l'accès au trousseau devrait s'ouvrir
  6. Autoriser l'accès au trousseau pour ajouter les certificats à votre trousseau

Le Developer ID Certification Authority aurait dû être installé par Xcode, mais si ce n'était pas le cas, vous pouvez l'installer vous-même. Vous devrez le télécharger séparément de Developer ID Authority ou en cliquant sur le lien + dans Onglet Certificats et utilisez le lien en bas pour télécharger le certificat.

Ce serait également le bon moment pour vous assurer que vous disposez de Apple Worldwide Developer Relations Certification Authority, qui est la base de certains des outils de signature. Il doit être installé dans votre système trousseau de clés, par l'installateur Xcode et peut être téléchargé directement à partir du + lien dans l'onglet Certificats ci-dessus ou depuis Apple WWDR CA .

Selon le Guide de distribution des applications d'Apple , il existe des trousseaux spécifiques qui sont appropriés pour chacun des certificats et des clés:

  • Vos clés privées et vos certificats de signature ( Developer ID Installer, Developer ID Application, et les certificats App Store) doivent être dans votre login trousseau
  • Apple Worldwide Developer Relations Certification Authority et Developer ID Certification Authority appartiennent au système porte-clés
  • Vos certificats de développeur appartiennent également à votre identifiant trousseau de connexion

Maintenance du trousseau

Étant donné que Xcode manipule automatiquement les trousseaux et que certains certificats sont régulièrement réémis lorsque les profils changent (bien que ce ne soit pas pour Developer ID, car il a des certificats pluriannuels et ne nécessite pas de profils), vous pouvez vous retrouver avec une propagation d'inutiles et des certificats potentiellement déroutants dans votre trousseau. C'est une bonne idée de les nettoyer lorsqu'ils ont expiré, car ils peuvent créer une certaine confusion pour Xcode.

[~ # ~] avertissements [~ # ~]

  • Avant d'effectuer toute maintenance sur vos trousseaux, assurez-vous d'avoir une sauvegarde de vos trousseaux
  • Ce processus est destiné à supprimer les certificats inutiles liés au développement. Si les certificats ne commencent pas par Développeur Mac, Développeur Mac tiers, Développeur iPhone ou ID développeur, ne plaisante pas avec eux pour le moment. Si vous supprimez accidentellement le certificat que vous avez reçu avec un e-mail (par exemple), même s'il a expiré, vous ne pourrez peut-être pas lire l'e-mail que vous avez reçu.

Choses à faire:

  1. Quittez Xcode
  2. Exécutez les premiers soins du trousseau (à partir de Accès au trousseau ) et vérifiez que vos trousseaux sont OK
  3. Cliquez sur la catégorie Certificats dans la barre latérale gauche
  4. Recherchez les certificats de développeur expirés des types mentionnés ci-dessus. Ils apparaîtront avec un petit [~ # ~] x [~ # ~] dans le coin inférieur droit.
  5. Sélectionnez les certificats que vous supprimerez et sauvegardez-les en utilisant Fichier> Exporter les éléments ...
  6. Mettez ce fichier dans un endroit sûr et donnez-lui un bon mot de passe
  7. Supprimez les certificats que vous avez sauvegardés
  8. Parcourez vos certificats restants et vérifiez que vous disposez des certificats mentionnés dans la section précédente. Si vous ne le faites pas, vous devrez les télécharger et éventuellement les renouveler.
  9. Vérifiez que les certificats figurent dans les trousseaux indiqués ci-dessus (tous vos certificats de signature doivent figurer dans votre identifiant trousseau de connexion, par exemple)
52
gaige

La réponse a finalement été très simple. Ma clé privée était manquante. Pour cela, j'ai révoqué le certificat et suivi ses étapes dans le programme développeur (en particulier la création d'un certificat CSR au cours du processus, ce que je n'ai pas obtenu plusieurs fois, sauf si j'ai révoqué le certificat).

9
Saikrishna

Comme même

certtool y | grep "Developer ID Application: xxxx"

n'a pu afficher aucun résultat, j'ai deviné qu'il s'agissait d'un problème d'accès au trousseau souhaité. J'ai donc d'abord vérifié que la clé privée était accessible à toutes les applications du trousseau lui-même, puis j'ai commencé à utiliser le k=/Users/myUser/Library/Keychains/login.keychain option dans la commande certtool et comme cela a réussi, j'ai fait la même chose avec

codesign --keychain /Users/myUser/Library/Keychains/login.keychain --force --verbose -s "Developer ID Application: xxxx"

3
Rosario Carcò