78 votes

sécurité / codesign dans Sierra: le trousseau ignore les paramètres de contrôle d'accès et les invites d'interface utilisateur pour obtenir l'autorisation

Départ avec macOS Sierra, je ne peux pas importer un codesign-identité dans un trousseau de clés avec la commande /usr/bin/sécurité plus sans usr/bin/codesign de l'INTERFACE utilisateur d'une demande d'accès lors de l'utilisation de cette identité. Cela brise l'emballage des scripts de serveur de build. Il semble y avoir aucune solution de contournement. Cela affecte personnalisé porte-clés, mais aussi la connexion.un trousseau de clés.

Étapes pour Reproduire: Exécutez les commandes suivantes dans le Terminal (requiert l'un de la signature de l'identité pour être disponible à l'importation):

security create-keychain -p test buildagent.keychain
security unlock-keychain -p test buildagent.keychain

security list-keychains -d user -s buildagent.keychain
security default-keychain -s buildagent.keychain

security import identity.p12 -k buildagent.keychain -P password -T /usr/bin/codesign

codesign -vfs '$IDENTITY' '${PRODUCT}' --keychain 'buildagent.keychain'

Résultat: macOS montre une INTERFACE utilisateur-l'invite demandant l'autorisation d'accès précédemment importé la clé privée.

J'ai essayé de nombreuses solutions, mais rien ne semble fonctionner:

  • À l'aide de la nouvelle .trousseau-db extension lors de la spécification du trousseau de nom
  • À l'aide de la connexion.trousseau à la place de celui personnalisé
  • L'importation de la p12 avec -A ("Permettent une application pour accéder à l' clé importée')
  • L'importation de la Cert Clé und séparément (extrait à partir de la p12 avant avec openssl pkcs12)

L'importation de l'identité fonctionne bien, je peux voir le certificat lors de l'affichage du contenu du porte-clés dans l'application Trousseau d'Accès. Le paramètre de contrôle d'accès pour la clé privée est correctement configuré (avec les codesign exception à la règle).

Comment puis-je éviter l'invite de l'INTERFACE utilisateur de la Sierra?

159voto

Ilian Iliev Points 1371

La commande que vous devez utiliser est la suivante:

security set-key-partition-list -S apple-tool:,apple: -s -k keychainPass keychainName

Veuillez avoir à l'esprit que cet outil de ligne de commande fonctionne comme la liste des porte-clés de la voie de la modification. Si vous exécuter set-key-partition-liste avec une seule valeur, il remplace tous les partitionIDs dans les certificats. Il ne sera pas valider les valeurs transmises.

Ce que cette commande n'est que le PartitionIDs (les éléments de l'après-S séparés par des virgules) pour les touches que vous pouvez signer (-s) pour un trousseau de clés. La réelle partitionID qui permet à l'codesigning est - apple:.

Je ne suis pas au courant de ce que apple-tool: fait qu'il n'est pas documentée, mais elle était là après l'importation de la clé avec security import donc je vais garder ça pour éviter de casser les gens qui copier-coller la commande.

Ce changement a été introduit avec Mac OS Sierra et n'est pas documentée (ou, au moins, je ne pouvais pas trouver de la documentation). Comme de Oct 16 à la page de manuel de sécurité n'est toujours pas de liste de cette commande.

Pour plus d'informations vous pouvez vous référer à ce rapport de bug - http://www.openradar.me/28524119

33voto

Wouter Points 1069

La commande à partir de cette réponse seulement déverrouillé le trousseau pour moi, mais j'ai toujours eu de l'INTERFACE utilisateur-invite vous demandant si l'application peut utiliser la clé.

Je l'ai prévenu l'invite comme ceci:

Aller pour le trousseau de clés dans le Trousseau d'Accès, double-cliquez sur toutes les touches, et dans l'onglet Contrôle d'Accès, cochez la case 'Autoriser toutes les applications pour accéder à cet élément'.

enter image description here

J'ai été en mesure de télécharger le nouveau fichier keychain puis à mon serveur de build Jenkins, où il est débloqué par la de porte-clés et les Profils de configuration du Plugin. Le construire maintenant succède à la signature.

30voto

Rafael Machado Points 479

Pour ceux qui rencontrent ce problème avec Travis ou un autre CI, vous devez ajouter codesign dans la liste d'identifiants d'application.

security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k keychainPass keychainName

PS: j'utilise keychainName.keychain (en ajoutant .keychain )

7voto

Ika Points 403

Pour une raison quelconque, l' security set-key-partition-list n'a pas de travail pour moi.

Je l'ai résolu en utilisant l'option-A lors de l'importation du certificat dans le trousseau d'accès:

security import ${P12_FILE} -k ${KEYCHAIN_PATH} -P ${P12_PASSWORD} -A

Il n'est pas nécessaire d'utiliser l' security set-key-partition-list par la suite.

Cette option permet à toute application d'accéder à la clé importée sans avertissement. Par conséquent, il empêche l'invite d'apparaître. Notez qu'il est précaire, car la clé n'est pas protégé, mais en fonction de votre contexte, ça pourrait aider.

Sur le dessus de que le trousseau de clés doit être ajouté à la liste de recherche:

security list-keychains -s ${KEYCHAIN_PATH}

Puis le trousseau de clés doit être débloqué. Sinon, une invite vous demandant de le trousseau d'accès mot de passe s'affiche:

security unlock-keychain -p ${KEYCHAIN_PASSWORD} ${KEYCHAIN_PATH}

Finalement, l'auto-verrouillage de délai d'expiration doit être désactivé. C'est dans le cas où la construction est assez longue et le trousseau de re-verrouillage:

security set-keychain-settings ${KEYCHAIN_PATH}

1voto

arnoldbird Points 333

Après avoir essayé de nombreuses solutions différentes, ce qui a fonctionné pour moi était simplement en train de changer le mot de passe de mon trousseau de clés.

  • Finder > Aller > Utilitaires
  • Ouvrez le Trousseau d'Accès de l'utilitaire.
  • Pas sûr que si j'avais besoin de faire cette étape: Dans la barre latérale gauche de le Trousseau d'Accès de l'utilitaire, cliquez sur Mes Certificats. Regarder le Trousseau de la colonne de confirmer le Trousseau de votre certificat de développement apple. Dans mon cas, c'était dans "login" trousseau de clés.
  • Changer le mot de passe pour le trousseau de clés de l'étape précédente. Vous pourriez veux essayer de le verrouiller, puis de le déverrouiller, si il est verrouillé. Vous modifiez le mot de passe en cliquant sur le trousseau de connexion ("login", dans mon cas), puis en sélectionnant "Changer de Mot de passe..." dans le menu d'Édition du Trousseau d'Accès de l'utilitaire.
  • La prochaine fois que j'ai couru l'archive étape dans Xcode (dans le menu Produit), j'ai été finalement invité à entrer un mot de passe keychain et j'ai entré le mot de passe de mon "login" trousseau de clés. Puis il a travaillé. Quand il a fini, j'ai vu des Archives à l'écran avec l'une de mes applications qui y sont répertoriées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X