web-dev-qa-db-fra.com

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

À partir de macOS Sierra, je ne peux plus importer une identité de code-code dans un trousseau contenant/usr/bin/security sans que l'utilisateur ne soit invité par l'interface utilisateur usr/bin/codesign à accéder à cette identité. Cela casse les scripts d'empaquetage du serveur de génération. Il semble n'y avoir aucune solution de contournement. Cela concerne les trousseaux personnalisés créés, mais également le login.keychain.

Étapes pour reproduire: Exécutez les commandes suivantes dans Terminal (nécessite qu'une identité de signature soit disponible pour 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 affiche une invite d'interface utilisateur demandant l'autorisation d'accéder à la clé privée précédemment importée.

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

  • Utilisation de la nouvelle extension .keychain-db lors de la spécification du nom du trousseau
  • Utiliser le login.keychain au lieu du personnalisé
  • Importer le p12 avec -A ('Autoriser n'importe quelle application à accéder à la clé importée')
  • Importation de la clé individuelle et de la clé séparément (en cours d’extraitement de la p12 avec openssl pkcs12)

L'importation de l'identité fonctionne définitivement, je peux voir le CERT et la clé lors de l'affichage du contenu du trousseau dans l'application Keychain Access. Le paramètre de contrôle d'accès de la clé privée est également correctement configuré (avec la règle d'exception de codeign souhaitée).

Comment puis-je éviter l'invite d'interface utilisateur de Sierra?

68
Sven Driemecker

La commande que vous devez utiliser est la suivante:

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

N'oubliez pas que cet outil de ligne de commande fonctionne comme le mode de modification des list-keychains. Si vous exécutez set-key-partition-list avec une valeur unique, tous les ID de partition contenus dans les certificats seront écrasés. Cela ne validera pas les valeurs passées.

Cette commande définit les identificateurs de partition (les éléments après -S séparés par une virgule) pour les clés pouvant signer (-s) pour un trousseau spécifique. Le partitionID actuel qui autorise la codification est Apple:.

Je ne sais pas quoi Apple-tool: fait comme ce n’est pas documenté, mais il était là après avoir importé la clé avec security import donc je le garde pour éviter de briser les personnes qui copient-collent la commande.

Cette modification a été introduite avec Mac OS Sierra et n’est pas documentée (ou du moins, je n’ai pas trouvé de documentation). À partir du 16 octobre, la page de manuel relative à la sécurité ne répertorie toujours pas cette commande.

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

132
Ilian Iliev

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

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

P.S: J'utilise keychainName.keychain (en ajoutant .keychain)

28
Rafael Machado

La commande de cette réponse n'a déverrouillé le trousseau que pour moi, mais j'avais toujours l'invite d'interface utilisateur qui demandait si l'application en cours pouvait utiliser la clé.

J'ai empêché l'invite comme ceci:

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

enter image description here

J'ai ensuite été en mesure de télécharger le nouveau fichier de trousseau sur mon serveur de génération Jenkins, où il est déverrouillé par le plug-in de profils de provisioning et de porte-clés . La construction réussit maintenant la signature.

27
Wouter

Pour une raison quelconque, le security set-key-partition-list N'a pas travaillé pour moi.

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

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

Il n'est pas nécessaire d'utiliser le security set-key-partition-list ensuite.

Cette option permet à n'importe quelle application d'accéder à la clé importée sans avertissement. Par conséquent, cela empêche l'invite de se présenter. Notez qu’elle n’est pas sécurisée, car la clé n’est pas protégée mais, en fonction de votre contexte de construction, elle peut être utile.

En plus de cela, le trousseau doit être ajouté à la liste de recherche:

security list-keychains -s ${KEYCHAIN_PATH}

Ensuite, le trousseau devrait être déverrouillé. Sinon, une invite demandant le mot de passe du trousseau sera affichée:

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

Finalement, le délai de verrouillage automatique devrait être désactivé. C'est dans le cas où la construction est assez longue et que le trousseau se re-verrouille:

security set-keychain-settings ${KEYCHAIN_PATH}
4
Ika

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

  • Finder> Aller> Utilitaires
  • Ouvrez l'utilitaire Keychain Access.
  • Pas sûr que je devais faire cette étape: Dans la barre latérale gauche de l'utilitaire Keychain Access, cliquez sur Mes certificats. Examinez la colonne Trousseau pour confirmer le trousseau de votre certificat de développeur Apple.). Dans mon cas, il se trouvait dans le trousseau de "connexion".
  • Changer le mot de passe pour le trousseau de l'étape précédente. Vous voudrez peut-être essayer de le verrouiller puis de le déverrouiller, s'il est verrouillé. Vous modifiez le mot de passe en cliquant sur le trousseau approprié ("login", dans mon cas), puis en sélectionnant "Changer le mot de passe ..." dans le menu Edition de l'utilitaire Keychain Access.
  • La prochaine fois que j'ai exécuté l'étape d'archivage dans Xcode (dans le menu Produit), un mot de passe de trousseau a finalement été demandé et j'ai saisi le mot de passe de mon trousseau de "connexion". Ensuite cela a fonctionné. Quand il a fini, j'ai vu un écran Archives avec mon application répertoriée.
1
arnoldbird