Dois-je signer moi-même du code open source?

11

J'utilise macOS 10.14 et j'ai rencontré un problème lorsque j'ai essayé d'installer un plugin open source pour Vim que j'ai trouvé sur Github. J'ai téléchargé le code source et l'ai compilé moi-même, ce qui a bien fonctionné, mais lorsque je l'ai exécuté, l'exécution a été interrompue car la "signature de code [de l'exécutable] n'est pas valide pour une utilisation en cours".

Cela m'a donné beaucoup de questions que je ne peux pas comprendre:

Je pourrais soit le signer moi-même, mais cela ne ruinerait-il pas le but de la signature de code? Existe-t-il une différence qualitative dans la signature de code à partir d'Internet et dans l'autorisation des applications de développeurs non identifiés dans la boîte de dialogue "Cette application a été téléchargée à partir d'Internet"?

Si je ne le fais pas, à qui incombe-t-il de «signer»? Le responsable du référentiel? Les contributeurs? Apple s'attend-il à ce que les développeurs open source aient toujours un ID développeur Apple? Ou ai-je mal compris l'objectif de la signature de code?

Éditer:

Pour clarifier, ma question est de savoir comment je dois gérer le code source non signé que je compile moi-même, car je ne m'attends pas à ce que les contributeurs puissent toujours, ou se souvenir de, signer leur code, en particulier lorsqu'il s'agit de petites contributions à des projets open source avec de nombreux contributeurs.

Syntaxén
la source

Réponses:

9

Signature de code ad hoc

Pour les applications tierces et les fichiers binaires que vous compilez vous-même et qui nécessitent la signature de code, utilisez une signature de code ad hoc .

  • Je suppose que l'application ne fonctionnera pas sans signature;
  • Je suppose que la demande ne sera pas distribuée;
  • Je suppose que vous ne vous souciez pas que l'identité de la signature soit valide.

Une signature ad hoc n'offre pas d'avantages de sécurité fiables. Il peut être utilisé pour déterminer si l'application a été modifiée et il peut être utilisé pour appliquer des restrictions de sécurité, telles que des droits, à une application.

Une signature ad hoc validera codesignmais pas spctl. Cela peut ou non être important selon le binaire signé. Pour les applications et les exécutables, il est peu probable que cela ait de l'importance car il spctln'est pas exécuté sur des fichiers binaires créés localement.

Pourquoi Code Sign?

Concernant la question raffinée:

Comment dois-je gérer le code source non signé que je compile moi-même, car je ne m'attends pas à ce que les contributeurs puissent toujours signer ou se souvenir de leur code, surtout lorsqu'il s'agit de petites contributions à des projets open source avec de nombreux contributeurs.

Pour la plupart des applications auto-compilées, la signature de code n'est pas nécessaire. Cela suppose que vous faites confiance au code de l'application. Sur macOS, vous pouvez ouvrir des applications non fiables à partir du Finder, voir Ouvrir une application d' Apple à partir d'un développeur non identifié .

Si vous ne faites pas confiance au code ou aux développeurs, ne compilez pas ou n'exécutez pas l'application.

Votre responsabilité

Le fournisseur du code source n'a aucune responsabilité ni obligation de fournir des binaires signés pré-construits. Étant auto-compilé, toute signature de code est votre choix et votre responsabilité.

  • Apple exige que les soumissions à leurs App Stores soient signées par code.

  • Apple demande aux développeurs en dehors de leurs App Stores de signer leur code, mais il n'est pas encore requis.

Dans les deux cas, seuls les binaires finaux sont signés. Le code source et les ressources d'origine ne sont pas signés.

Le code source n'est pas signé

Le code source lui-même ne peut pas être signé de manière significative pour macOS. Les fichiers source et le code peuvent être signés numériquement, comme tout autre fichier, mais cela n'a aucun impact sur la façon dont l'application ou le binaire résultant est traité par macOS.

Comment faire pour signer un code ad hoc sur une application Mac

Pour coder une application sur macOS avec une signature ad hoc, définissez l' -sindicateur d' identité sur -:

codesign --force -s - </path/to/application>

Toutes les autres règles, exigences et permutations de la codesigncommande restent les mêmes.

Le drapeau --forceest utilisé ici pour remplacer toute signature existante.

Vous devrez peut-être ajouter l' --deepindicateur à la codesigncommande pour signer les sous-ressources telles que les infrastructures et les services intégrés.

Graham Miln
la source
Pourquoi recommandez-vous des signatures ad hoc? La réponse que vous avez liée aux états "Dans la pratique, la création de binaires signés ad hoc n'a qu'une valeur pratique pour les développeurs Apple".
Wowfunhappy
Cela n'a aucun sens pour moi. L'ajout d'une signature ad hoc signifie que la validation de la signature échouera. Cela ne vous mène nulle part - le programme échouera avec exactement le même message d'erreur.
jksoegaard
Oui, je vois que vous avez supprimé le lien vers ma réponse sur la signature ad hoc et ajouté les hypothèses. Mais ces hypothèses sont-elles valables? - Vous semblez répondre comme si la question concernait l'exécution d'une application. Ce n'est pas. Il s'agit d'avoir une application déjà signée à laquelle l'OP souhaite ajouter un plugin. C'est-à-dire que le plugin doit passer la validation de la bibliothèque avec l'application signée à l'origine (Vim) comme maître.
jksoegaard
La question d'origine a été modifiée. Il est assez large tel quel. L'intervenant peut commenter, clarifier et essayer ces réponses pour voir ce qui fonctionne pour eux. Cette réponse tente de répondre à la question modifiée et fournit une approche pratique. Si cela n'aide pas, ou a des hypothèses incorrectes, le questionneur peut, espérons-le, faire sonner la voix et clarifier son intention.
Graham Miln
1
Cette réponse a été utile. Ma question était assez générale car j'ai trouvé que les documents sur les pommes étaient un peu difficiles à comprendre. L'utilisation de la signature ad hoc a résolu le problème spécifique que j'avais.
Syntaxén
5

Signer le programme vous-même ne ruine pas l'objectif de la signature de code. L'objectif général de la signature de code est de permettre de vérifier que le programme est une copie non modifiée créée à l'origine par une entité spécifique (personne ou entreprise). Lorsque vous signez un programme vous-même uniquement pour l'exécuter sur votre ordinateur, vous permettez au système de vérifier que c'est bien vous qui avez créé le binaire, et qu'il n'a pas été modifié par d'autres.

La différence qualitative entre signer vous-même l'application binaire et autoriser simplement les applications de développeurs non identifiés dans GateKeeper est que dans le premier cas, vous autorisez une seule application spécifique à s'exécuter - tandis que dans le second, vous ouvrez la possibilité que vous puissiez ouvrir un grand nombre de différentes applications simplement en cliquant dessus avec le bouton droit et en choisissant Ouvrir. C'est-à-dire qu'il est plus restrictif et donc un peu plus «sécurisé» en signant vous-même le programme spécifique.

La responsabilité de la signature vous appartient entièrement. Le développeur open source ne peut pas signer le code source - il est seulement possible de signer les binaires compilés. Lorsque vous produisez vous-même les fichiers binaires compilés, il vous incombe de les signer.

Vous pouvez créer un compte développeur sur le site Web d'Apple qui vous permettra de créer un certificat pouvant être utilisé pour la signature. Si vous êtes développeur et compilez régulièrement des fichiers binaires pour les exécuter sur Mac, c'est la façon préférée de faire les choses. Si c'est une chose unique que vous ne ferez probablement plus jamais, il est probablement exagéré de passer par ce processus. YMMV.

D'autres réponses à votre question ici vous recommandent d'utiliser une signature ad hoc pour votre binaire. Ça ne marchera pas. Vous devrez générer une signature valide pour que le binaire s'exécute avec GateKeeper sur son paramètre le plus sécurisé.

jksoegaard
la source
1

Dois-je signer moi-même du code open source?

Si vous n'êtes pas développeur, alors non.

La signature de code, en bref, est une méthode pour dire que vous (le développeur) êtes qui vous dites et que le code n'a pas changé depuis votre dernière signature.

Existe-t-il une différence qualitative dans la signature de code à partir d'Internet et dans l'autorisation des applications de développeurs non identifiés dans la boîte de dialogue "Cette application a été téléchargée à partir d'Internet"?

Cela ressemble à votre signature de code déroutante (ce qui est requis par les développeurs pour publier des applications sur l'App Store) et Gatekeeper (ce qui protège votre Mac contre l'installation de logiciels de développeurs non identifiés).

Si vous autorisez votre Mac à installer des logiciels à la fois sur l'App Store et les développeurs identifiés, vous obtiendrez toujours la fenêtre contextuelle vous avertissant que le logiciel sera installé

Et s'il s'agit d'un développeur non identifié, vous obtiendrez le même popup avec une "icône d'avertissement"

Vous pouvez toujours installer le logiciel. Il s'agit simplement d'un mécanisme qui force l'interaction de l'utilisateur à installer réellement le logiciel, vous offrant une couche de sécurité contre les logiciels malveillants auto-installés.

Allan
la source
Merci, cela répond à certaines mais pas à toutes les questions. J'ai édité ma question pour essayer d'être plus précis dans ce que je demande
Syntaxén