kextutil говорит, что моя подпись расширения ядра недействительна, а знак кода говорит, что она действительна. Не загружается
Это первый раз, когда я пытался подписать расширение ядра, поэтому я открыт для вероятности, что я делаю это неправильно.
Я запросил у Apple сертификат на подпись ядра. Мне нужно было заполнить форму, демонстрирующую, что мне действительно нужно создать драйвер в ядре, а не драйвер пространства пользователя, который общался с IOUserClient.
$ sudo kextutil FL2000.kext/
Password:
Notice: /Library/Extensions/FL2000.kext has debug properties set.
Diagnostics for /Library/Extensions/FL2000.kext:
Code Signing Failure: code signature is invalid
Untrusted kexts are not allowed
ERROR: invalid signature for com.frescologic.FL2000, will not load
Он не загружается при загрузке - это нужно, потому что это графический драйвер.
$ codesign --verify -vvvv FL2000.kext/
FL2000.kext/: valid on disk
FL2000.kext/: satisfies its Designated Requirement
$ codesign --display -vvvv FL2000.kext/
Executable=/Library/Extensions/FL2000.kext/Contents/MacOS/FL2000
Identifier=com.frescologic.FL2000
Format=bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=1590 flags=0x0(none) hashes=44+3 location=embedded
Hash type=sha256 size=32
CandidateCDHash sha1=83a0328f9af971484b7e30c8d04e68a96dee72c1
CandidateCDHash sha256=cd6c72d17f00d2eed36078eece6a5b536c482772
Hash choices=sha1,sha256
Page size=4096
CDHash=cd6c72d17f00d2eed36078eece6a5b536c482772
Signature size=4693
Authority=Mac Developer: Michael Crawford (YU8CSARZFD)
Authority=Apple Worldwide Developer Relations Certification Authority
Authority=Apple Root CA
Signed Time=Nov 10, 2017, 1:10:07 PM
Info.plist entries=20
TeamIdentifier=444JK52Q93
Sealed Resources version=2 rules=13 files=2
Internal requirements count=1 size=184
Помоги мне, О Stackru-Ван. Ты моя единственная надежда!
1 ответ
Я должен был заметить это в вашем codesign
вывод, но ваши комментарии ясно дают понять: проблема с сертификатом, который вы используете. Apple выпускает 4 вида сертификатов подписи Mac:
- Сертификаты"Mac Developer" предназначены для подписи приложений, предназначенных для Mac App Store на этапе разработки. Это тип сертификата, который вы пытаетесь использовать для подписи kext. Это не сработает. Это подпишет это хорошо, но kextd и т. Д. Не примет подпись.
- Сертификаты"Application ID Application" предназначены для подписывания приложений, которые будут распространяться за пределами App Store. Специальный вариант этого типа сертификата включает в себя расширение сертификата "( 1.2.840.113635.100.6.1.18)" - только с этим расширением становится возможным подписывать кексы так, чтобы они были приняты macOS.
- Сертификаты"Установщик идентификатора разработчика" предназначены для подписи.pkg файлов / пакетов установщика. Если вы распространяете приложение через файл DMG или ZIP, это вам не нужно, но если вам нужен установщик, возможно, потому, что вы распространяете не приложение, а kext или системную службу, тогда вам следует создайте установочный пакет и подпишите его таким сертификатом.
- Сертификаты"Mac Distribution" - это то, что вы используете для подписи сборки приложения перед его отправкой в Mac App Store. Они также не имеют отношения к подписанию kext.
Предположительно по соображениям безопасности сертификаты типов 2-4 выдаются только агентам группы в учетной записи Apple Developer. Слабым разработчикам выдаются только сертификаты "Mac Developer", которые должны быть чисто временными, поэтому они не очень важны для безопасности.
Итак, подведем итог: ваша проблема заключается в том, что вы используете сертификат "Mac Developer" для подписи kext. Вместо этого вам нужно использовать сертификат "Application ID Application", в частности, тот, который был выпущен после того, как команде разработчиков были предоставлены привилегии подписи kext. Если вы не подали заявку на получение привилегий подписи kext, вы можете сделать это, используя эту форму. (Похоже, вы делали это раньше, но я указываю это на благо людей в той же ситуации, которые могут столкнуться с этим в будущем.)