Açık kaynak kodunu kendim imzalamalı mıyım?


11

MacOS 10.14 kullanıyorum ve Github'da bulduğum Vim için açık kaynaklı bir eklenti yüklemeye çalıştığımda bir sorunla karşılaştım. Kaynak kodunu indirdim ve kendim derledim, bu da iyi çalıştı, ancak çalıştırdığımda, "Yürütülebilir Kod imzası [işlemde] işlemde kullanım için geçerli değil" nedeniyle yürütme kesildi.

Bu bana kafamı saramadığım birçok soru verdi:

Ya kendim imzalayabilirdim, ama kod imzalama amacını mahvetmez mi? İnternetten kod imzalama ve "Bu uygulama internetten indirildi" iletişim kutusunda tanımlanamayan geliştiricilerin uygulamalarına izin verme konusunda herhangi bir nitel fark var mı?

Eğer yapmazsam, kimin "sorumluluğu" imzalamak? Havuz yöneticisi mi? Katkıda bulunanlar? Apple, açık kaynak geliştiricilerinin her zaman bir Apple Geliştirici Kimliğine sahip olmasını bekliyor mu? Yoksa kod imzalamanın amacını yanlış anladım mı?

Düzenle:

Açıklığa kavuşturmak için sorum, kendimi derlediğim imzasız kaynak kodunu nasıl ele almam gerektiğidir, çünkü katkıda bulunanların her zaman kodlarını imzalayabilmelerini veya hatırlayabilmelerini beklemiyorum, özellikle de açık kaynak projelerine küçük katkılar söz konusu olduğunda birçok katılımcı ile.

Yanıtlar:


9

Özel Kod İmzalama

Kendiniz derlediğiniz ve kod imzalama gerektiren üçüncü taraf uygulamalar ve ikili dosyalar için geçici kod imzası kullanın .

  • Ben uygulama imza olmadan çalışmaz varsayalım;
  • Uygulamanın dağıtılmayacağını varsayıyorum;
  • İmzanın kimliğinin geçerli olduğunu umursadığınızı varsayıyorum.

Geçici imza güvenilir güvenlik avantajları sağlamaz. Uygulamanın değiştirilip değiştirilmediğini belirlemek için kullanılabilir ve bir uygulamaya yetkiler gibi güvenlik kısıtlamalarını uygulamak için kullanılabilir.

Geçici bir imza doğrulanır codesignancak onaylanmaz spctl. İmzalanan ikili dosyaya bağlı olarak bu önemli olabilir veya olmayabilir. Uygulamalar ve yürütülebilir dosyalar için, spctlyerel olarak oluşturulan ikili dosyalarda çalışmadığından bunun önemi yoktur.

Neden Kod İşareti?

Rafine soru ile ilgili olarak:

Kendimi derlediğim imzasız kaynak kodunu nasıl ele almalıyım, çünkü katkıda bulunanların her zaman kodlarını imzalayabilmelerini veya hatırlamayı beklemiyorum, özellikle de birçok katkıda bulunan açık kaynak projelerine küçük katkılar söz konusu olduğunda.

Kendiliğinden derlenen çoğu uygulama için kod imzalamaya gerek yoktur. Bu, uygulamanın koduna güvendiğinizi varsayar. MacOS'ta güvenilmeyen uygulamaları Finder'dan açabilirsiniz, bkz. Apple'ın Tanımlanamayan bir geliştiriciden uygulama açma .

Kod veya geliştiricilere güvenmiyorsanız uygulamayı derlemeyin veya çalıştırmayın.

Sorumluluğunuz

Kaynak kodun sağlayıcısının, önceden oluşturulmuş kod imzalı ikili dosyaları sağlama sorumluluğu veya yükümlülüğü yoktur. Kendi kendini derleyen tüm kod imzalama seçiminiz ve sorumluluğunuzdur.

  • Apple , kodlarının imzalanması için App Store'larına gönderilmesini gerektirir .

  • Elma isteği onların App Mağazaları dışında geliştiricilerin kod imzalamak, ancak henüz gerekli değildir.

Her iki durumda da yalnızca son ikili dosyalar imzalanır. Orijinal kaynak kodu ve kaynaklar imzalı değil.

Kaynak Kod İmzalanmadı

Kaynak kodun kendisi, macOS için anlamlı bir şekilde imzalanmış kod olamaz. Kaynak dosyalar ve kod, başka herhangi bir dosya gibi dijital olarak imzalanabilir, ancak sonuçta ortaya çıkan uygulamanın veya ikili dosyanın macOS tarafından nasıl işlendiği üzerinde hiçbir etkisi yoktur.

Ad-Hoc Kodu Mac Uygulaması Nasıl İmzalanır

MacOS'ta bir uygulamayı ad-hoc imzayla kodlamak için kimlik -sbayrağını şu şekilde ayarlayın -:

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

codesignKomutun diğer tüm kuralları, gereksinimleri ve permütasyonları aynı kalır.

--forceBurada bayrak mevcut imzanın üzerine yazmak için kullanılır.

Çerçeveler ve katıştırılmış hizmetler gibi alt kaynakları imzalamak --deepiçin codesignkomuta bayrak eklemeniz gerekebilir .


Neden geçici imzalar öneriyorsunuz? "Pratikte geçici imzalı ikili dosyalar oluşturmak yalnızca Apple geliştiricileri için pratik değerdir" ifadesine bağlandığınız yanıttır.
Wowfunhappy

Bu benim için bir anlam ifade etmiyor. Geçici imza eklemek, imza doğrulamanın başarısız olacağı anlamına gelir. Bu sizi hiçbir yere götürmez - program aynı hata mesajıyla başarısız olur.
jksoegaard

Evet, geçici oturumdaki yanıtımın bağlantısını kaldırdığınızı ve varsayımları eklediğinizi görüyorum. Fakat bu varsayımlar hiç geçerli değil mi? - Sanki soru bir uygulamayı çalıştırmakla ilgili gibi görünüyor. O değil. OP'nin eklenti eklemek istediği zaten imzalanmış bir uygulamaya sahip olmakla ilgilidir. Eklentinin, asıl olarak imzalanmış uygulama (Vim) ile kütüphane doğrulamasını geçmesi gerekir.
jksoegaard

Orijinal soru düzenlenmiştir. Olduğu gibi oldukça geniştir. Soru soran kişi, kendileri için neyin işe yaradığını görmek için bu yanıtları yorumlayabilir, açıklayabilir ve deneyebilir. Bu cevap, düzenlenen soruyu cevaplamaya ve pratik bir yaklaşım sağlamaya çalışır. Yardımcı olmazsa veya yanlış varsayımlara sahipse, soru soran kişi umarım girebilir ve niyetlerini açıklayabilir.
Graham Miln

1
Bu cevap yardımcı oldu. Sorum oldukça geneldi çünkü elma belgelerinin anlaşılması biraz zor oldu. Geçici imza kullanmak, yaşadığım sorunu çözdü.
Syntaxén

5

Programı kendiniz imzalamak, kod imzalamanın amacını bozmaz. Kod imzalamanın genel amacı, programın başlangıçta belirli bir varlık (kişi veya şirket) tarafından değiştirilmiş değiştirilmemiş bir kopya olduğunu doğrulamaktır. Bir programı yalnızca bilgisayarınızda çalışacak şekilde kendiniz imzaladığınızda, sistemin gerçekten ikili dosyayı oluşturanın siz olduğunu ve başkaları tarafından değiştirilmediğini denetlemesini sağlarsınız.

Uygulama ikili dosyasını kendiniz imzalamak ve sadece GateKeeper'da tanımlanamayan geliştiricilerin uygulamalarına izin vermek arasındaki nitel fark, eski durumda tek bir özel uygulamanın çalışmasına izin vermenizdir; oysa ikincisini, çok sayıda farklı uygulamaları sağ tıklayın ve Aç'ı seçin. Yani belirli bir programı kendiniz imzalayarak daha kısıtlayıcı ve dolayısıyla biraz daha "güvenli" dir.

İmzalama sorumluluğu tamamen size aittir. Açık kaynak geliştirici kaynak kodunu imzalayamaz - yalnızca derlenmiş ikili dosyaları imzalamak mümkündür. Derlenmiş ikili dosyaları kendiniz oluştururken, bunları imzalamak size düşer.

Apple'ın web sitesinde, imzalama için kullanılabilecek bir sertifika oluşturmanıza olanak tanıyan bir geliştirici hesabına kaydolabilirsiniz. Bir geliştiriciyseniz ve Mac'lerde çalıştırmak için düzenli olarak ikili dosyaları derliyorsanız, bu şeyleri yapmanın tercih edilen yoludur. Bu muhtemelen bir daha yapmayacağınız bir kerelik bir şeyse, bu süreci atlatmak muhtemelen aşırıya kaçacaktır. YMMV.

Sorunuz için diğer yanıtlar, ikili dosya için geçici imza kullanmanızı önerir. Bu işe yaramayacak. GateKeeper ile ikili çalıştırmanın en güvenli ayarında çalışması için geçerli bir imza oluşturmanız gerekecektir.


1

Açık kaynak kodunu kendim imzalamalı mıyım?

Eğer geliştirici değilseniz, o zaman hayır.

Kısaca kod imzalama, (geliştiricinin) sizin söylediğiniz kişi olduğunuzu ve kodun en son imzaladığınızdan bu yana değişmediğini söylemek için bir yöntemdir.

İnternetten kod imzalama ve "Bu uygulama internetten indirildi" iletişim kutusunda tanımlanamayan geliştiricilerin uygulamalarına izin verme konusunda herhangi bir nitel fark var mı?

Kafa karıştırıcı Kod İmzalama (Geliştiricilerin Uygulamaları App Store'da yayınlamaları için gerekenler ) ve Gatekeeper (Mac'inizi tanımlanamayan geliştiricilerden yazılım yüklemekten koruyan) gibi görünüyor.

Mac'inizin hem App Store'dan hem de tanımlanmış geliştiricilerden yazılım yüklemesine izin verirseniz, yazılımın yükleneceği konusunda sizi uyaran bir açılır pencere alırsınız.

Ve eğer tanımlanmamış bir geliştiriciyse, aynı açılır pencereyi "uyarı simgesi" ile alırsınız

Yazılımı yine de yükleyebilirsiniz. Bu sadece kullanıcı etkileşimini yazılımı kendiliğinden yüklenen kötü amaçlı yazılımlara karşı bir güvenlik katmanı sağlamaya zorlayan bir mekanizmadır.


Teşekkür ederim, bu tüm soruları değil bazı soruları cevaplıyor.
Sorduğum şeyde
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.