Infatti il messaggio "Sviluppatore non identificato ..." è il risultato di una combinazione di entrambe le attività: verifica l'attributo com.apple.quarantine e le risorse per la firma del codice (in * / Contents / _CodeSignature / CodeResources) mentre lo stato effettivo della firma è determinato esclusivamente da * / CodeResources .
Puoi ottenere l'attributo esteso inserendo:
$ xattr -p com.apple.quarantine /Applications/*.app
Le informazioni sulla firma del codice sono accessibili inserendo:
$ codesign -dvvv /Applications/*.app
Esempio:
$ 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 parte più importante è la catena di certificati (e la catena di fiducia):
Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Qui sono visibili tre diverse autorità:
- Certificato root: Apple Root CA
- Certificato intermedio per sviluppatori Apple: Autorità di certificazione ID dello sviluppatore
- Certificato dello sviluppatore: Google, Inc. (EQHXZ8M8AV)
Ciò significa che l'app è firmata con un certificato per sviluppatori, pubblicato e firmato dall'autorità di sviluppo intermedio di Apple, che a sua volta è pubblicato e firmato dalla CA Root di Apple.
Questa catena qualifica Google (o più esattamente: il team / unità Google, Inc. (EQHXZ8M8AV)) come uno sviluppatore identificato da Apple.
Puoi anche codificare le app da te o con un certificato di codesign da un'altra autorità intermedia / root, ma ciò non supererà Gatekeeper.
Ora sono possibili quattro permutazioni assumendo che Gatekeeper sia abilitato (ma non considerando l'autofirmazione / la firma di alieni):
- Nessun attributo com.apple.quarantine / nessun certificato Apple Developer (Esempio: brew cask installato Apache CouchDB )
- Nessun attributo com.apple.quarantine / certificato Apple Developer (Esempio: brew cask installato Google Chrome )
- Un attributo com.apple.quarantine / nessun certificato Apple Developer (Esempio: Apache CouchDB installato scaricando il file zip dal sito web e copiando l'app decompressa in / Applicazioni / )
- Un attributo com.apple.quarantine / un certificato per sviluppatori Apple (Esempio: Google Chrome installato scaricando il dmg dal sito web e copiando l'app in / Applicazioni / )
Nei primi due casi l'app verrà semplicemente lanciata. Nel terzo caso riceverai il messaggio Unindentified Developer . Puoi risolvere questo rimuovendo l'attributo esteso xattr -d com.apple.quarantine *
(= caso 1). Nel quarto caso otterrai "* scaricato da Internet, sei sicuro di volerlo aprire?"