无法加载 kext “验证扩展失败”

问题描述 投票:0回答:1

我正在尝试为 Apple Silicon 构建https://github.com/jwise/HoRNDIS,我能够获得能够签署 kext 文件的证书。

但是,我在加载 kext 时遇到错误

sudo kextload HoRNDIS.kext

Executing: /usr/bin/kmutil load -p /Library/Extensions/HoRNDIS.kext
Error Domain=KMErrorDomain Code=29 "Authenticating extension failed: Kext com.joshuawise.kexts.HoRNDIS v9.2 in executable kext bundle com.joshuawise.kexts.HoRNDIS at /private/var/db/KernelExtensionManagement/Staging/com.joshuawise.kexts.HoRNDIS.YWG1Lt/HoRNDIS.kext:

Authenticating extension failed: Bad code signature" UserInfo={NSLocalizedDescription=Authenticating extension failed: Kext com.joshuawise.kexts.HoRNDIS v9.2 in executable kext bundle com.joshuawise.kexts.HoRNDIS at /private/var/db/KernelExtensionManagement/Staging/com.joshuawise.kexts.HoRNDIS.YWG1Lt/HoRNDIS.kext:

Authenticating extension failed: Bad code signature}

我克隆了我构建 kext 的存储库

xcodebuild -sdk macosx -configuration Release

之后我用

codesign

签署了代码
codesign -s "Developer ID Application: Developer Team (id)" -vvvv /Users/myuser/src/HoRNDIS/build/Release/HoRNDIS.kext

上述命令的输出是:

/Users/oksuz/src/HoRNDIS/build/Release/HoRNDIS.kext: signed bundle with Mach-O universal (x86_64 arm64e) [com.joshuawise.kexts.HoRNDIS]

我好像做错了什么。如何以正确的方式加载内核(不禁用 SIP)

codesign -dvvvv HoRNDIS.kext 输出:

Executable=/Library/Extensions/HoRNDIS.kext/Contents/MacOS/HoRNDIS
Identifier=com.joshuawise.kexts.HoRNDIS
Format=bundle with Mach-O universal (x86_64 arm64e)
CodeDirectory v=20200 size=1308 flags=0x0(none) hashes=35+3 location=embedded
Hash type=sha256 size=32
CandidateCDHash sha1=da805347a49a50cff27fddc8e9da83cc80763002
CandidateCDHashFull sha1=da805347a49a50cff27fddc8e9da83cc80763002
CandidateCDHash sha256=e72f5bbb583b89840270080d39f3fe8673a55b89
CandidateCDHashFull sha256=e72f5bbb583b89840270080d39f3fe8673a55b8947c9242bf55048e18d0a70cd
Hash choices=sha1,sha256
CMSDigest=a8ca9fac31012390c5eecce48bbf3b13ed658552b602e2f01f0a5b292cc21da7
CMSDigestType=2
Page size=4096
CDHash=e72f5bbb583b89840270080d39f3fe8673a55b89
Signature size=9098
Authority=Developer ID Application: Developer Team (Developer Team ID)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=19 Mar 2023 14:55:52
Info.plist entries=22
TeamIdentifier=TEAMIDENTIFIER
Sealed Resources version=2 rules=13 files=1
Internal requirements count=1 size=188

my developer key's extensions

macos iokit kernel-extension
1个回答
0
投票

您的证书不是 kext 签名证书。要对 kext 进行签名,您需要使用带有 1.2.840.113635.100.6.1.18

 扩展名
的“开发者 ID 应用程序”证书。然后你还需要通过公证程序。

截至 2023 年,Apple 很少再授予 1.2.840.113635.100.6.1.18 证书了。

我还要指出,kext 似乎是 USB 网络适配器 kext。即使 kext 已正确签名和公证,这些从 macOS 11 开始完全不受支持

如果你的目标是 macOS 11 或更高版本,我认为你唯一的选择是:放弃 SIP 的 kext 签名要求(并希望“不受支持”的状态仍然足以让它工作)重写驱动程序 DriverKit 或用户空间。

© www.soinside.com 2019 - 2024. All rights reserved.