In effetti il messaggio "Sviluppatore non identificato ..." è il risultato di una combinazione di entrambe le attività: controllo dell'attributo com.apple.quarantine e delle risorse di firma del codice (in * / Contents / _CodeSignature / CodeResources) mentre lo stato di firma effettivo è determinato esclusivamente da * / CodeResources .
È possibile ottenere l'attributo esteso inserendo:
$ xattr -p com.apple.quarantine /Applications/*.app
È possibile accedere alle informazioni sulla firma del codice 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 radice: CA radice Apple
- Certificato di sviluppatore Apple intermedio: Autorità di certificazione ID sviluppatore
- Certificato dello sviluppatore: Google, Inc. (EQHXZ8M8AV)
Ciò significa che l'app è firmata con un certificato dello sviluppatore, pubblicato e firmato dall'autorità di sviluppo intermedia di Apple, che a sua volta è pubblicata e firmata dalla CA principale di Apple.
Questa catena qualifica Google (o più esattamente: il team / unità Google, Inc. (EQHXZ8M8AV)) come sviluppatore identificato da Apple.
Puoi anche firmare in codice le app da solo o con un certificato di firma del codice di un'altra autorità intermedia / root, ma questo non supererà Gatekeeper.
Ora sono possibili quattro permutazioni supponendo che Gatekeeper sia abilitato (ma senza considerare l'auto-firma / la firma aliena):
- Nessun attributo com.apple.quarantine / nessun certificato Apple Developer (Esempio: brew cask installato Apache CouchDB )
- Nessun attributo com.apple.quarantine / un certificato per sviluppatori Apple (esempio: brew cask installato Google Chrome )
- Un attributo com.apple.quarantine / nessun certificato Apple Developer (Esempio: Apache CouchDB installato scaricando lo 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 all'interno in / Applicazioni / )
Nei primi due casi l'app si avvierà semplicemente. Nel terzo caso riceverai il messaggio Sviluppatore non identificato . È possibile risolvere questo problema rimuovendo l'attributo esteso xattr -d com.apple.quarantine *(= caso 1). Nel quarto caso otterrai "* è stato scaricato da Internet, sei sicuro di volerlo aprire?"