Как определить, почему Gatekeeper отклоняет подписанный исполняемый файл? - PullRequest
3 голосов
/ 07 ноября 2019

У нас есть мультиплатформенный набор исполняемых файлов и библиотек командной строки, которые мы портировали на Mac. Формат файла был

  • / Applications /
    • (папка компании) /
      • (наш пользовательский интерфейс) .app
      • (название продукта) /
        • bin /
          • ... executalbes ...
        • lib /
          • ... dylibs ...
        • (прочее) /...

Поставлено вDMG, который был подписан под кодом, как и приложение. Это работало нормально до Catalina.

Теперь на Catalina мы подписали все исполняемые файлы, dylibs, приложения (включая вложенные в каркас приложения верхнего уровня), каркасы и сам DM. Когда мы заверяем это, полученный журнал JSON не содержит проблем. Однако, когда я запускаю любой из наших исполняемых файлов , который зависит от одного из наших dylibs , я получаю всплывающее окно, в котором говорится, что «разработчик не может быть идентифицирован». Даже если он был подписан и заверен нотариально. Запуск кодового знака с опцией -dvvv включает в себя следующее:

  • Выбор хэша SHA-256
  • список записей полномочий, оканчивающихся в Apple Root CA
  • Запись TeamIdentifier
  • Метка времени
  • Время выполнения: 10.13.0

Вопрос Как я могу это исправить или, по крайней мере, заставить Gatekeeper сказать мне почему он не принимает этот файл? Может быть, журнал или эквивалент spctl --assess для файлов, а не приложений?

Наблюдения

  • Это происходит только тогда, когда
    • ОС - Catalina
    • он находится в папке / Applications
    • вне / Applications (например, в папке на рабочем столе), это происходит только иногда (и иногда он утверждает, что dylib не может быть загружен с первой попытки, а затем успешноесли попытается через мгновение)
    • исполняемый файл зависит от одного или нескольких наших dylibs (автономные запускаются нормально)
    • исполняемый файл имеет набор com.apple.quarantine xattr
      • Я попытался смешать и сравнить между чистыми и загруженными (то есть файлами, помещенными в карантин xattr), и проблема возникает, только если исполняемый файл помещен в карантин;не имеет значения, загружает ли исполняемый файл, не помещенный в карантин, карантина dylib
  • Операция подписания выполнялась с помощью кодового знака с аргументами "--deep --strict --timestamp --options runtime ", а затем проверено
    • РЕДАКТИРОВАТЬ: С тех пор я обновил это, чтобы включить некоторые разрешения Hardened Runtime для решения другой проблемы сборки, но это не помогло с этим
  • Исполняемые файлы зависят от dylibs через @rpath (как сообщает otool -L)
    • EDIT: я пытался заменить @rpath на @executable_path /../ libв каждом случае, и это не помогло
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...