我在优胜美地的kext上签了代码。但是kextload失败了
这是版本2的代码签名。 codesign --verify
是真的
但是kextload失败了。为什么不加入约塞米蒂?
这是我的日志。
我已经使用codesign -dvvv ./myKext.kext
进行了检查并且没事。
codesign -dvvv ./myKext.kext
返回以下内容:
Executable=/Path/to/myKext
Identifier=com.myKext.kext.Firewall
Format=bundle with Mach-O thin (x86_64)
CodeDirectory v=20100 size=317 flags=0x0(none) hashes=9+3 location=embedded
Hash type=sha1 size=20
CDHash=d0ff68bd8b49c650f45349c2d1570d45a8c1f148
Signature size=8544
Authority=Developer ID Application: My Kext Co., Ltd. (R2PBZJ465V)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=2014. 10. 31. 오전 11:09:35
Info.plist entries=18
TeamIdentifier=not set
Sealed Resources version=2 rules=12 files=1
Internal requirements count=1 size=188
它显示版本2.
但sudo kextload ./myKext.kext
正在返回以下内容:
/Path/to/myKext.kext加载失败 - (libkern / kext)无法加载 (原因未明确);检查系统/内核日志是否有错误或尝试 kextutil(8)
cat /var/log/system.log
返回:
com.apple.kextd [19]:错误:无效签名 com.myKext.kext.Firewall,不会加载
sudo kextutil -l ./myKext.kext
返回:
Diagnostics for ./myKext.kext:
Code Signing Failure: code signature is invalid
ERROR: invalid signature for com.myKext.kext.Firewall, will not load
为什么签名无效?!
我已经在约塞米蒂签署了版本2协议
我做错了什么标志?有人教我。
答案 0 :(得分:8)
我也有同样的问题。我和你分享了解决方案。
Apple改变了Mac开发者计划,并从中删除了kext认证。 因此,即使您是Mac开发人员计划的成员,除非您在Developer ID and Gatekeeper申请,否则您将无法获得kext开发认证。 苹果说,顺便说一句,“KEXT签署旨在签署广泛分布在大型组织中的商业运输kexts或项目。”
所以我们可以做的是通过添加“kext-dev-mode = 1”boot-arg在KEXT开发模式下运行我们的Kext。像,
sudo nvram boot-args="debug=0x146 kext-dev-mode=1"
然后重启。
我希望这会对你有所帮助。
答案 1 :(得分:0)
我同意ParaDevil的回答。
对于OS X Yosemite,您可以执行以下操作:
为了加载未签名的kexts,系统必须通过添加“kext-dev-mode = 1”boot-arg启用“KEXT Developer Mode”。以下命令(后面是重新启动)适用于准备用于测试非生产密钥的系统:
sudo nvram boot-args="debug=0x146 kext-dev-mode=1"
一旦完成,机器将能够加载任何有效的kext; 仍会检查签名,但验证失败 导致日志消息。注意:这适用于包含a的kexts 二进制,以及无代码(仅限plist)的kexts。系统将保留 在开发人员模式下,直到您手动删除boot-arg或clear nvram并重新启动。您可以通过重新定义来退出开发人员模式 boot-arg到之前的设置,或者将你的boot-args清除为 如下:
sudo nvram -d boot-args
Apple建议您使用KEXT Developer Mode而不是 使用您的开发者ID证书在驱动程序不足时对其进行签名 发展。理想情况下,您应该使用开发者ID来签署驱动程序 证书只有在达到测试的最后阶段时才会出现 被评估发布给客户。
对于OS X El Captain 10.11命令:
sudo nvram boot-args="debug=0x146 kext-dev-mode=1"
没有效果。
答案 2 :(得分:0)
截至2016年12月:
这是由于El Capitan(10.11)中引入的System Integrity Protection功能。从El Capitan开始,kext-dev-mode启动选项无效,因此ParaDevil的答案不起作用。相反,您必须按照this page:
中的说明禁用SIP通过重新启动计算机并在启动时按住Command和R键来启动恢复操作系统。
从“工具”菜单启动终端。
运行以下命令:
csrutil disable
重新启动时,应禁用系统完整性保护。