8 votes

Comment MacOS identifie-t-il le statut de signature d'une application téléchargée depuis Internet ?

J'ai téléchargé une application sur Internet en utilisant Safari. Lorsque je l'ai exécutée, MacOS m'a signalé que l'application provenait d'un développeur non identifié.

Comment MacOS est-il capable de déterminer cette information ? Où sont stockées les métadonnées de signature d'une application ?

0 votes

Si je comprends bien votre question, vous recevez cette alerte car une application que vous avez téléchargée dans Safari n'a pas été signée par un développeur connu d'Apple. Vous demandez où se trouve le programme xyz sur votre ordinateur ?

16voto

Graham Miln Points 39606

Les informations sont stockées dans des attributs étendus, avec des informations supplémentaires potentiellement intégrées dans une application.

Attributs étendus

Cette information de quarantaine est stockée comme un attribut étendu . Utilisez le xattr pour visualiser les attributs associés à un fichier ou à une application.

L'attribut à l'origine de ce message est com.apple.quarantine .

Ver Comment supprimer les "attributs étendus" d'un fichier sous Mac OS X ? y Impossible d'ouvrir l'application car elle provient d'un développeur non identifié. pour plus de détails.

Gatekeeper et signatures de code

L'attribut étendu est utilisé par Gatekeeper sur MacOS et est discuté dans Comment définir (restaurer) l'attribut com.apple.quarantine ?

Une signature numérique facultative intégrée à une application est utilisée pour déterminer le développeur de l'application. Si aucune signature n'est trouvée, MacOS présente l'application comme provenant d'un développeur non identifié.

5 votes

Ce n'est pas tout à fait correct. Les données de la quarantaine sont utilisées pour suivre la source d'un fichier téléchargé, mais la signature est ailleurs.

1 votes

@duskwuff a raison. La quarantaine provoque l'apparition de la fenêtre contextuelle "XXX a été téléchargé sur Internet, êtes-vous sûr de vouloir l'ouvrir ?".

1 votes

Tous les fichiers et toutes les applications ne sont pas signés par un code. De nombreuses applications ne le sont pas, et dans ce cas, il n'existe pas de signature intégrée. Ce sera le cas pour les messages "développeur non identifié".

7voto

klanomath Points 63400

En fait, le message "Unidentified developer ..." est le résultat d'une combinaison des deux tâches : vérification de l'attribut com.apple.quarantine. et les ressources de signature du code (dans */Contents/_CodeSignature/CodeResources), tandis que le statut de signature réel est uniquement déterminé par les éléments suivants */CodeResources .

Vous pouvez obtenir l'attribut étendu en entrant :

$ xattr -p com.apple.quarantine /Applications/*.app

L'information sur la signature du code est accessible en entrant :

$ codesign -dvvv /Applications/*.app

Exemple :

$ codesign -dvvvv /Applications/Google\ Chrome.app/
Executable=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
Identifier=com.google.Chrome
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=273 flags=0x800(restrict) hashes=3+3 location=embedded
OSPlatform=36
OSSDKVersion=658432
OSVersionMin=657664
Hash type=sha256 size=32
CandidateCDHash sha1=bc8e3dffe7d9d5242e09ea80a220ed365d46fdf2
CandidateCDHash sha256=d7ae6211906bb17d593ce9c215d190a81f37e658
Hash choices=sha1,sha256
Page size=4096
CDHash=d7ae6211906bb17d593ce9c215d190a81f37e658
Signature size=8949
Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=20. Mar 2018 at 07:23:20
Info.plist entries=36
TeamIdentifier=EQHXZ8M8AV
Sealed Resources version=2 rules=7 files=203
Internal requirements count=1 size=240

La partie la plus importante est la chaîne de certificats (et la chaîne de confiance) :

Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA

Ici, trois autorités différentes sont visibles :

  1. Certificat racine : Apple Root CA
  2. Certificat intermédiaire de développeur Apple : Autorité de certification de l'ID du développeur
  3. Certificat du développeur : Google, Inc. (EQHXZ8M8AV)

Cela signifie que l'application est signée avec un certificat de développeur, publié et signé par l'autorité intermédiaire de développement d'Apple, qui est elle-même publiée et signée par l'autorité de certification racine d'Apple.

Cette chaîne qualifie Google (ou plus exactement : l'équipe/unité Google, Inc. (EQHXZ8M8AV)) comme un développeur identifié par Apple.

Vous pouvez également coder des applications, soit vous-même, soit à l'aide d'un certificat de codage d'une autre autorité intermédiaire/de démarrage, mais cela ne permet pas de surmonter Gatekeeper.

Maintenant, quatre permutations sont possibles en supposant que Gatekeeper est activé (mais sans tenir compte de l'auto-signature/de l'aliénation de la signature) :

  • Pas d'attribut com.apple.quarantine/pas de certificat Apple Developer (Exemple : brew cask a installé Apache CouchDB )
  • Pas d'attribut com.apple.quarantine/un certificat Apple Developer (exemple : brew cask installé Google Chrome )
  • Un certificat com.apple.quarantine attribut/no Apple Developer (exemple : Apache CouchDB est installé en téléchargeant le fichier zip depuis le site web et en copiant l'application décompressée dans /Applications/. )
  • Un attribut com.apple.quarantine/un certificat Apple Developer (exemple : Google Chrome est installé en téléchargeant le dmg depuis le site web et en copiant l'application à l'intérieur dans /Applications/. )

Dans les deux premiers cas, l'application se lance tout simplement. Dans le troisième cas, vous obtiendrez le message Développeur non identifié message. Vous pouvez résoudre ce problème en supprimant l'attribut étendu xattr -d com.apple.quarantine * (=cas 1). Dans le quatrième cas, vous obtiendrez le "* a été téléchargé sur Internet, êtes-vous sûr de vouloir l'ouvrir ?"

5voto

Comment MacOS est-il capable de déterminer cette information ? Où sont stockées les métadonnées de signature d'une application ?

La signature est stockée dans le binaire de l'application lui-même, avec quelques données supplémentaires dans le paquet d'applications (dans le fichier Contents/_CodeSignature/CodeResources ).

Vous pouvez obtenir quelques informations sur la signature en utilisant l'utilitaire de ligne de commande codesign -- par exemple :

# codesign -dv /Applications/Preview.app
Executable=/Applications/Preview.app/Contents/MacOS/Preview
Identifier=com.apple.Preview
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20100 size=21314 flags=0x0(none) hashes=659+5 location=embedded
Platform identifier=4
Signature size=4485
Info.plist entries=35
TeamIdentifier=not set
Sealed Resources version=2 rules=13 files=2077
Internal requirements count=1 size=68

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X