Pobrałem aplikację z Internetu za pomocą Safari. Po uruchomieniu macOS informuje, że aplikacja pochodzi od niezidentyfikowanego programisty.
W jaki sposób macOS jest w stanie określić te informacje? Gdzie są przechowywane metadane podpisywania aplikacji?
Odpowiedzi:
Informacje są przechowywane w ramach rozszerzonych atrybutów, a dodatkowe informacje mogą być osadzone w aplikacji.
Rozszerzone atrybuty
Informacje o kwarantannie są przechowywane jako atrybut rozszerzony . Użyj tego
xattr
narzędzia, aby wyświetlić atrybuty powiązane z plikiem lub aplikacją.Atrybut powodujący tę wiadomość to
com.apple.quarantine
.Zobacz Jak usunąć „atrybuty rozszerzone” z pliku w Mac OS X? i aplikacji nie można otworzyć, ponieważ pochodzi od niezidentyfikowanego programisty, aby uzyskać więcej informacji.
Strażnik i podpisy kodów
Rozszerzony atrybut jest używany przez Gatekeeper na macOS i jest omówiony w Jak ustawić (przywrócić) atrybut com.apple.quarantine?
Opcjonalny podpis cyfrowy osadzony w aplikacji służy do określania dewelopera aplikacji. Jeśli podpis nie zostanie znaleziony, macOS przedstawia aplikację jako niezidentyfikowanego programistę.
źródło
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:
Informacje o podpisywaniu kodu można uzyskać, wprowadzając:
Przykład:
Najważniejszą częścią jest łańcuch certyfikatów (i łańcuch zaufania):
Tutaj widoczne są trzy różne organy:
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):
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ć?”źródło
Podpis jest przechowywany w samym pliku binarnym aplikacji, z pewnymi dodatkowymi danymi w pakiecie aplikacji (w pliku
Contents/_CodeSignature/CodeResources
).Możesz uzyskać pewne informacje na temat podpisu za pomocą narzędzia wiersza polecenia
codesign
- na przykład:źródło