Как отладить отказ от подписи кода OSX?

Я подписываю установщик install4j для OSX, однако OSX отклоняет его. Системный журнал сообщает только об отклонении, а spctl сообщает только об отклонении без объяснения причин. Как я могу определить, почему он был отклонен?


person user1009908    schedule 22.03.2015    source источник


Ответы (1)


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

Я предполагаю, что вы хотите, чтобы ваше приложение было разрешено в соответствии с правилом «идентифицированный разработчик»? Если это так, есть пара тестов для поиска очевидных проблем: во-первых, запустите codesign -vv --deep-verify /path/to/yourapp.app и убедитесь, что он печатает «действительно на диске» и «удовлетворяет назначенному требованию» (и не выдает никаких ошибок) — если нет , что-то не так с подписью или содержимым приложения.

Во-вторых, запустите codesign -dvv /path/to/yourapp.app и убедитесь, что перечисленные в нем данные включают:

Authority=Developer ID Application: [Your name/company here]
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Sealed Resources version=2 rules=[something] files=[something]

Если список полномочий отличается от этого, вы использовали неправильный сертификат для его подписи. Если версия Sealed Resources равна 1 или отсутствует в списке, вы подписали ее с помощью старой версии OS X, а последние версии отклонят формат подписи.

person Gordon Davisson    schedule 23.03.2015
comment
При запуске codesign --verify я рекомендую также использовать параметр --deep-verify, чтобы убедиться, что все плагины, частные фреймворки и т. д. также правильно подписаны. - person JWWalker; 24.03.2015
comment
@JWWalker Хорошая идея; Я добавил это в свой ответ. - person Gordon Davisson; 24.03.2015
comment
Не могли бы вы прояснить немного о списке полномочий? В документах apple.co/1BMv0Te указано, есть ли у вашей компании стороннее удостоверение подписи, которое вы используете для подписи. code в других системах, вы можете использовать его с командой OS X codesign. Такой сертификат не будет включать Apple Root CA. Или этот авторитетный список что-то другое? - person user1009908; 25.03.2015
comment
@user1009908 user1009908 Вы можете подписывать с помощью любого сертификата для подписи кода, но правила Gatekeeper по умолчанию разрешают только приложения, подписанные с помощью сертификатов Apple Developer ID. Причина этого в том, что Apple хочет иметь возможность отозвать сертификат любого, уличенного в подписании вредоносного ПО, и они могут сделать это только в том случае, если они являются органом, выдавшим сертификат. - person Gordon Davisson; 26.03.2015
comment
Спасибо, это действительно помогло мне! Я пытался создать код в системе 10.8, и хотя код показал успех, Gatekeeper все еще блокировал его. Кикером была эта строка Sealed Resources — только после написания кода в системе 10.9 она читалась как Sealed Resources version=2. Apple, конечно, мало заботится о тех, кто не использует последние версии ОС, и я нигде не нашел этого предостережения в их документах. Спасибо, что спасли мой рассудок! - person Dr Marble; 02.04.2015
comment
@DrMarble: Он есть, но его нужно поискать. См. Изменения гейткипера в OS X 10.9.5 и более поздних версиях раздела Подписание кода OS X в деталях. - person Gordon Davisson; 02.04.2015
comment
@GordonDavisson А, вот оно, спрятано на полпути к этой технической заметке. Спасибо еще раз! - person Dr Marble; 03.04.2015
comment
Это было действительно полезно. Моя проблема заключалась в том, что я использовал iPhone Developer ID вместо Developer ID Application. Спасибо. - person Joshua Pinter; 22.05.2018