Должен ли я сам подписывать открытый исходный код?

11

Я использую macOS 10.14 и столкнулся с проблемой, когда попытался установить плагин с открытым исходным кодом для Vim, который я нашел на Github. Я загрузил исходный код и скомпилировал его самостоятельно, что работало хорошо, но когда я его запустил, выполнение было прервано из-за того, что «подпись кода [исполняемого файла] недопустима для использования в процессе».

Это дало мне много вопросов, которые я не могу обернуть вокруг:

Я мог бы подписать его сам, но разве это не разрушило бы цель подписи кода? Есть ли качественная разница в подписывании кода из Интернета и разрешении приложений от неизвестных разработчиков в диалоговом окне «Это приложение было загружено из Интернета»?

Если я не сделаю это, чья "ответственность" это подписать? Хранитель репозитория? Авторы? Ожидает ли Apple, что разработчики с открытым исходным кодом всегда будут иметь Apple Developer ID? Или я неправильно понял цель подписания кода?

Редактировать:

Чтобы прояснить, мой вопрос заключается в том, как мне обращаться с неподписанным исходным кодом, который я сам компилирую, так как я не ожидаю, что авторы всегда смогут или не забудут подписать свой код, особенно когда речь идет о крошечном вкладе в проекты с открытым исходным кодом. со многими вкладчиками.

Syntaxén
источник

Ответы:

9

Специальная подпись кода

Для сторонних приложений и двоичных файлов, которые вы сами компилируете и которые требуют подписи кода, используйте специальную подпись кода .

  • Я предполагаю, что приложение не будет работать без подписи;
  • Я предполагаю, что приложение не будет распространяться;
  • Я предполагаю, что вы не заботитесь о подлинности подписи.

Специальная подпись не обеспечивает надежных преимуществ безопасности. Его можно использовать для определения того, было ли изменено приложение, и его можно применять для применения к приложению ограничений безопасности, таких как права доступа.

Специальная подпись будет проверять, codesignно не проверять spctl. Это может иметь или не иметь значения в зависимости от подписываемого двоичного файла. Для приложений и исполняемых файлов это вряд ли имеет значение, поскольку spctlне запускается на локально созданных двоичных файлах.

Почему кодовый знак?

По поводу уточненного вопроса:

Как мне обращаться с неподписанным исходным кодом, который я сам компилирую, так как я не ожидаю, что участники всегда смогут или не забудут подписать свой код, особенно когда речь идет о крошечном вкладе в проекты с открытым исходным кодом со многими участниками.

Для большинства самоскомпилированных приложений нет необходимости подписывать код. Это предполагает, что вы доверяете коду приложения. В macOS вы можете открывать ненадежные приложения из Finder, см. Apple Открыть приложение от неизвестного разработчика .

Если вы не доверяете коду или разработчикам, не компилируйте и не запускайте приложение.

Ваша ответственность

Поставщик исходного кода не несет ответственности или обязательств по предоставлению предварительно скомпонованных кодированных двоичных файлов. Будучи самостоятельно скомпилированным, вся подпись кода - ваш выбор и ответственность.

  • Apple требует, чтобы представления в их магазинах приложений были подписаны кодом.

  • Apple просит разработчиков за пределами своих магазинов приложений подписать свой код, но это пока не требуется.

В обоих случаях подписываются только окончательные двоичные файлы. Оригинальный исходный код и ресурсы не подписаны.

Исходный код не подписан

Сам исходный код не может быть подписан осмысленным образом для macOS. Исходные файлы и код могут иметь цифровую подпись, как и любой другой файл, но это не влияет на то, как полученное приложение или двоичный файл обрабатывается macOS.

Как создать специальный код для подписи приложения Mac

Чтобы кодировать приложение в macOS специальной подписью, установите -sфлаг идентификации на -:

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

Все остальные правила, требования и перестановки codesignкоманды остаются прежними.

Флаг --forceиспользуется здесь, чтобы перезаписать любую существующую подпись.

Вам может понадобиться добавить --deepфлаг в codesignкоманду, чтобы подписать подресурсы, такие как платформы и встроенные сервисы.

Грэм Милн
источник
Почему вы рекомендуете специальные подписи? Ответ, на который вы ссылаетесь, гласит: «На практике создание специальных двоичных файлов с подписью имеет практическую ценность только для разработчиков Apple».
Wowfunhappy
Это не имеет никакого смысла для меня. Добавление специальной подписи означает, что проверка подписи не удастся. Это ни к чему не приведет - программа завершится ошибкой с точно таким же сообщением об ошибке.
jksoegaard
Да, я вижу, что вы удалили ссылку на мой ответ о специальной подписке и добавили предположения. Но эти предположения верны вообще? - Вы, кажется, отвечаете так, как будто вопрос касается запуска приложения. Не то. Речь идет о наличии уже подписанного приложения, к которому ОП хочет добавить плагин. Т.е. плагин должен пройти проверку библиотеки с изначально подписанным приложением (Vim) в качестве мастера.
jksoegaard
Оригинальный вопрос был отредактирован. Это довольно широко, как есть. Спрашивающий может прокомментировать, уточнить и попробовать эти ответы, чтобы увидеть, что для них подходит. Этот ответ пытается ответить на отредактированный вопрос и предоставить практический подход. Если это не помогает, или имеет неправильные предположения, спрашивающий может надеяться присоединиться и уточнить свои намерения.
Грэм Милн
1
Этот ответ был полезен. Мой вопрос был довольно общим, потому что я нашел документы по яблоку немного сложными для понимания. Использование специальной подписи решило конкретную проблему, с которой я столкнулся.
Синтаксен
5

Подписание программы самостоятельно не разрушает цель подписания кода. Общая цель подписания кода состоит в том, чтобы сделать возможным проверку того, что программа является неизмененной копией, которая была первоначально создана конкретной организацией (лицом или компанией). Когда вы подписываете программу только для запуска на своем компьютере, вы позволяете системе проверить, что именно вы создали двоичный файл и что он не был изменен другими.

Качественная разница между подписыванием двоичного кода приложения самостоятельно и просто разрешением приложений от неизвестных разработчиков в GateKeeper заключается в том, что в первом случае вы разрешаете запускать одно конкретное приложение, тогда как во втором вы открываете возможность того, что вы можете открыть много различные приложения, просто щелкнув правой кнопкой мыши по ним и выбрав Открыть. Т.е. это более ограничительно и, следовательно, несколько более «безопасно», подписывая конкретную программу самостоятельно.

Ответственность за подпись полностью лежит на вас. Разработчик открытого исходного кода не может подписать исходный код - это возможно только подписать скомпилированные двоичные файлы. Поскольку вы сами создаете скомпилированные двоичные файлы, вам приходится подписывать их.

Вы можете зарегистрировать учетную запись разработчика на веб-сайте Apple, которая позволит вам создать сертификат, который можно использовать для подписи. Если вы разработчик и регулярно компилируете двоичные файлы для запуска на Mac, это предпочтительный способ работы. Если это одноразовая вещь, которую вы, вероятно, больше никогда не сделаете, вероятно, пройти этот процесс излишне. YMMV.

Другие ответы на ваш вопрос здесь рекомендуют использовать специальную подпись для вашего двоичного файла. Это не будет работать. Вам нужно будет сгенерировать действительную подпись, чтобы бинарный файл работал с GateKeeper в наиболее безопасном режиме.

jksoegaard
источник
1

Должен ли я сам подписывать открытый исходный код?

Если вы не разработчик, то нет.

Вкратце, подписывание кода - это способ сказать, что вы (разработчик) являетесь тем, кем вы себя называете, и код не изменился с момента вашей последней подписи.

Есть ли качественная разница в подписывании кода из Интернета и разрешении приложений от неизвестных разработчиков в диалоговом окне «Это приложение было загружено из Интернета»?

Похоже на вашу запутанную подпись кода (что требуется разработчикам для публикации приложений в App Store) и Gatekeeper (что защищает ваш Mac от установки программного обеспечения от неизвестных разработчиков).

Если вы разрешите вашему Mac устанавливать программное обеспечение как из App Store, так и от определенных разработчиков, вы все равно получите всплывающее окно с предупреждением о том, что программное обеспечение будет установлено.

И если это от неопознанного разработчика, вы получите то же самое всплывающее окно со значком предупреждения

Вы все еще можете установить программное обеспечение. Это всего лишь механизм, который вынуждает пользователя взаимодействовать для фактической установки программного обеспечения, обеспечивая вам уровень защиты от самостоятельно устанавливаемого вредоносного ПО.

Аллан
источник
Спасибо, это отвечает на некоторые, но не на все вопросы. Я отредактировал свой вопрос, чтобы попытаться быть более конкретным в том, что я спрашиваю
Syntaxén