W rzeczywistości komunikat „Niezidentyfikowany programista ...” jest wynikiem połączenia obu zadań: sprawdzenia atrybutu com.apple.quarantine i zasobów do podpisywania kodu (w * / Contents / _CodeSignature / CodeResources), podczas gdy rzeczywisty status podpisywania to określone wyłącznie przez * / CodeResources .
Rozszerzony atrybut można uzyskać, wprowadzając:
$ xattr -p com.apple.quarantine /Applications/*.app
Informacje o podpisywaniu kodu można uzyskać, wprowadzając:
$ codesign -dvvv /Applications/*.app
Przykład:
$ 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
Najważniejszą częścią jest łańcuch certyfikatów (i łańcuch zaufania):
Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Tutaj widoczne są trzy różne organy:
- Certyfikat główny: Apple Root CA
- Pośredni certyfikat programisty Apple: Urząd certyfikacji ID dewelopera
- Certyfikat programisty: Google, Inc. (EQHXZ8M8AV)
Oznacza to, że aplikacja jest podpisana certyfikatem programisty, opublikowanym i podpisanym przez pośredni urząd programisty Apple, który sam jest opublikowany i podpisany przez główny urząd certyfikacji Apple.
Ten łańcuch kwalifikuje Google (a dokładniej: zespół / jednostkę Google, Inc. (EQHXZ8M8AV)) jako programistę zidentyfikowanego przez Apple.
Możesz także podpisywać aplikacje samodzielnie lub z certyfikatem podpisywania kodu od innego organu pośredniczącego / głównego, ale to nie obejdzie Gatekeeper.
Teraz możliwe są cztery permutacje przy założeniu, że Gatekeeper jest włączony (ale nie rozważa samodzielnego podpisywania / podpisywania obcych):
- Brak atrybutu com.apple.quarantine / brak certyfikatu Apple Developer (przykład: zainstalowano beczkę piwa Apache CouchDB )
- Brak atrybutu com.apple.quarantine / certyfikatu Apple Developer (przykład: beczka piwa zainstalowana Google Chrome )
- Atrybut com.apple.quarantine / brak certyfikatu Apple Developer (przykład: zainstalowany Apache CouchDB, pobierając plik zip ze strony internetowej i kopiując rozpakowaną aplikację do / Applications / )
- Atrybut com.apple.quarantine / certyfikat Apple Developer (przykład: Google Chrome jest zainstalowany, pobierając dmg ze strony internetowej i kopiując aplikację do / Applications / )
W pierwszych dwóch przypadkach aplikacja zostanie po prostu uruchomiona. W trzecim przypadku otrzymasz wiadomość Unindentified Developer . Możesz rozwiązać ten problem, usuwając atrybut rozszerzony xattr -d com.apple.quarantine *
(= przypadek 1). W czwartym przypadku pojawi się komunikat „* został pobrany z Internetu, czy na pewno chcesz go otworzyć?”