Czy powinienem sam podpisać kod open source?

11

Używam macOS 10.14 i napotkałem problem, gdy próbowałem zainstalować wtyczkę open source dla Vima, którą znalazłem na Github. Pobrałem kod źródłowy i sam go skompilowałem, co działało dobrze, ale kiedy go uruchomiłem, wykonanie zostało przerwane, ponieważ „Podpis kodu [pliku wykonywalnego] nie jest prawidłowy do użycia w procesie”.

To dało mi wiele pytań, na które nie mogę się oprzeć:

Mogę to podpisać sam, ale czy nie zrujnowałoby to celu podpisywania kodu? Czy jest jakaś różnica jakościowa w podpisywaniu kodu z Internetu i zezwalaniu na aplikacje od niezidentyfikowanych programistów w oknie dialogowym „Ta aplikacja została pobrana z Internetu”?

Jeśli tego nie zrobię, czyim „obowiązkiem” jest podpisanie? Opiekun repozytorium? Współtwórcy? Czy Apple spodziewa się, że programiści open source zawsze będą mieli identyfikator programisty Apple? Czy też źle zrozumiałem cel podpisywania kodu?

Edytować:

Aby wyjaśnić, moje pytanie dotyczy tego, jak powinienem obsługiwać niepodpisany kod źródłowy, który sam kompiluję, ponieważ nie oczekuję, że autorzy zawsze będą w stanie podpisywać swój kod, lub pamiętają o nim, szczególnie jeśli chodzi o niewielki wkład w projekty open source. z wieloma współpracownikami.

Składnia
źródło

Odpowiedzi:

9

Podpisywanie kodu ad-hoc

W przypadku aplikacji i plików binarnych innych firm, które sam skompilujesz i które wymagają podpisania kodu, użyj podpisu kodu ad hoc .

  • Zakładam, że aplikacja nie będzie działać bez podpisu;
  • Zakładam, że aplikacja nie będzie rozpowszechniana;
  • Zakładam, że nie obchodzi cię ważność podpisu.

Podpis ad-hoc nie zapewnia niezawodnych korzyści bezpieczeństwa. Można go użyć do ustalenia, czy aplikacja została zmieniona, i można zastosować do zastosowania ograniczeń bezpieczeństwa, takich jak uprawnienia, do aplikacji.

Podpis ad-hoc zostanie zatwierdzony, codesignale nie spctl. To może, ale nie musi mieć znaczenia, w zależności od podpisanego pliku binarnego. W przypadku aplikacji i plików wykonywalnych nie ma to większego znaczenia, ponieważ spctlnie jest uruchamiane na lokalnie tworzonych plikach binarnych.

Dlaczego znak kodowy?

Jeśli chodzi o dopracowane pytanie:

Jak powinienem obsługiwać niepodpisany kod źródłowy, który sam kompiluję, ponieważ nie oczekuję, że autorzy zawsze będą w stanie podpisywać swój kod, lub pamiętają o tym, szczególnie jeśli chodzi o niewielki wkład w projekty open source z wieloma autorami.

W przypadku większości samodzielnie skompilowanych aplikacji podpisywanie kodu nie jest konieczne. Zakłada się, że ufasz kodowi aplikacji. W systemie macOS możesz otwierać niezaufane aplikacje z Findera, zobacz Apple Otwórz aplikację od niezidentyfikowanego programisty .

Jeśli nie ufasz kodowi ani programistom, nie kompiluj ani nie uruchamiaj aplikacji.

Twoja odpowiedzialność

Dostawca kodu źródłowego nie jest odpowiedzialny za dostarczenie gotowych plików binarnych z podpisanym kodem. Ponieważ sam kompilujesz się, wszystkie podpisywanie kodu jest twoim wyborem i obowiązkiem.

  • Apple wymaga podpisania kodu w swoich sklepach z aplikacjami.

  • Jabłko żądania deweloperów spoza swoich sklepach App podpisać swój kod, ale to jeszcze nie jest wymagane.

W obu przypadkach podpisywane są tylko końcowe pliki binarne. Oryginalny kod źródłowy i zasoby nie są podpisane.

Kod źródłowy nie jest podpisany

Sam kod źródłowy nie może być kodowany w znaczący sposób dla macOS. Pliki źródłowe i kod mogą być podpisane cyfrowo, tak jak każdy inny plik, ale nie ma to wpływu na sposób, w jaki aplikacja lub plik binarny jest traktowany przez macOS.

Jak kodować Ad-Hoc Podpisz aplikację na Maca

Aby podpisać aplikację w systemie macOS za pomocą podpisu ad-hoc, ustaw -sflagę tożsamości na -:

codesign --force -s - </path/to/application>

Wszystkie pozostałe reguły, wymagania i permutacje codesignpolecenia pozostają takie same.

Flaga --forcesłuży tutaj do zastąpienia istniejącego podpisu.

Konieczne może być dodanie --deepflagi do codesignpolecenia, aby podpisać zasoby podrzędne, takie jak struktury i usługi osadzone.

Graham Miln
źródło
Dlaczego polecasz podpisy ad hoc? Odpowiedź, którą łączysz ze stwierdzeniem: „W praktyce tworzenie podpisanych plików binarnych ad hoc ma praktyczną wartość tylko dla programistów Apple”.
Wowfunhappy
To nie ma dla mnie żadnego sensu. Dodanie podpisu ad-hoc oznacza, że ​​sprawdzanie poprawności podpisu zakończy się niepowodzeniem. Nigdzie cię to nie prowadzi - program zawiedzie z dokładnie tym samym komunikatem o błędzie.
jksoegaard
Tak, widzę, że usunąłeś link do mojej odpowiedzi przy logowaniu ad-hoc i dodałeś założenia. Ale czy te założenia w ogóle się utrzymują? - Wygląda na to, że odpowiadasz, jakby pytanie dotyczyło uruchomienia aplikacji. Nie jest. Chodzi o posiadanie już podpisanej aplikacji, do której OP chce dodać wtyczkę. Tj. Wtyczka musi przejść walidację biblioteki z oryginalnie podpisaną aplikacją (Vim) jako master.
jksoegaard
Oryginalne pytanie zostało zredagowane. Jest raczej szeroki. Pytający może komentować, wyjaśniać i wypróbowywać te odpowiedzi, aby zobaczyć, co działa dla nich. Ta odpowiedź próbuje odpowiedzieć na edytowane pytanie i zapewnia praktyczne podejście. Jeśli to nie pomoże lub ma błędne założenia, pytający może, mam nadzieję, wdrożyć i wyjaśnić swoje zamiary.
Graham Miln
1
Ta odpowiedź była pomocna. Moje pytanie było dość ogólne, ponieważ uważałem, że dokumenty Apple są trochę trudne do zrozumienia. Korzystanie z podpisywania ad hoc rozwiązało konkretny problem, który miałem.
Składnia
5

Samo podpisanie programu nie rujnuje celu podpisywania kodu. Ogólnym celem podpisywania kodu jest umożliwienie sprawdzenia, czy program jest niezmodyfikowaną kopią, która została pierwotnie utworzona przez konkretną jednostkę (osobę lub firmę). Kiedy podpisujesz program, aby sam działał tylko na twoim komputerze, umożliwiasz systemowi sprawdzenie, czy to ty stworzyłeś plik binarny i czy nie został on zmodyfikowany przez innych.

Różnica jakościowa między samodzielnym podpisywaniem pliku binarnego aplikacji a po prostu zezwalaniem na aplikacje od niezidentyfikowanych programistów w GateKeeper polega na tym, że w pierwszym przypadku zezwalasz na uruchomienie jednej, konkretnej aplikacji - podczas gdy w drugim przypadku otwierasz się na możliwość otwarcia wielu różne aplikacje, klikając je prawym przyciskiem myszy i wybierając opcję Otwórz. Tzn. Jest to bardziej restrykcyjne, a przez to nieco bardziej „bezpieczne” przez samodzielne podpisanie konkretnego programu.

Odpowiedzialność za podpisanie należy wyłącznie do Ciebie. Deweloper open source nie może podpisać kodu źródłowego - możliwe jest tylko podpisanie skompilowanych plików binarnych. Gdy sam tworzysz skompilowane pliki binarne, podpisanie ich zależy od ciebie.

Możesz założyć konto programisty w witrynie internetowej Apple, które pozwoli ci utworzyć certyfikat, którego można użyć do podpisania. Jeśli jesteś programistą i regularnie kompilujesz pliki binarne do uruchamiania na komputerach Mac, jest to preferowany sposób robienia rzeczy. Jeśli jest to jednorazowa rzecz, której prawdopodobnie nigdy więcej nie zrobisz, prawdopodobnie przejście przez ten proces jest przesadą. YMMV.

Inne odpowiedzi na twoje pytanie tutaj zalecają podpisywanie ad-hoc dla twojego pliku binarnego. To nie zadziała. Musisz wygenerować prawidłowy podpis, aby uruchomić binarnie z GateKeeper na jego najbardziej bezpiecznym ustawieniu.

jksoegaard
źródło
1

Czy powinienem sam podpisać kod open source?

Jeśli nie jesteś programistą, to nie.

Podpisywanie kodu, w skrócie, jest metodą, aby powiedzieć, że jesteś (programistą) tym, za kogo się podajesz, a kod nie zmienił się od czasu ostatniego podpisania.

Czy jest jakaś różnica jakościowa w podpisywaniu kodu z Internetu i zezwalaniu na aplikacje od niezidentyfikowanych programistów w oknie dialogowym „Ta aplikacja została pobrana z Internetu”?

To brzmi jak twoje mylące podpisywanie kodu (co jest wymagane przez programistów do publikowania aplikacji w App Store) i Gatekeeper (co chroni komputer Mac przed instalacją oprogramowania przed niezidentyfikowanymi programistami).

Jeśli zezwolisz komputerowi Mac na instalowanie oprogramowania zarówno z App Store, jak i zidentyfikowanych programistów, nadal będziesz otrzymywać wyskakujące okienko z informacją, że oprogramowanie zostanie zainstalowane

A jeśli pochodzi od niezidentyfikowanego programisty, otrzymasz to samo wyskakujące okienko z „ikoną ostrzegawczą”

Nadal możesz zainstalować oprogramowanie. Jest to tylko mechanizm, który zmusza interakcję użytkownika do zainstalowania oprogramowania, zapewniając warstwę bezpieczeństwa przed samodzielnie zainstalowanym złośliwym oprogramowaniem.

Allan
źródło
Dziękuję, to odpowiada na niektóre, ale nie na wszystkie pytania. Zredagowałem swoje pytanie, aby bardziej precyzyjnie zadać pytanie
Syntaxén