codesigned kext但为什么不加入约塞米蒂(10.10)

时间:2014-10-31 10:00:00

标签: macos codesign kernel-extension

我在优胜美地的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协议 我做错了什么标志?有人教我。

3 个答案:

答案 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,您可以执行以下操作:

  1. 下载“内核调试工具包”;
  2. 运行安装程序包;
  3. 继续“自述”步骤;
  4. “自述”说:
  5.   

    为了加载未签名的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"
    

    没有效果。

    阅读System Integrity Protection Guide/Kernel Extensions了解详情。

答案 2 :(得分:0)

截至2016年12月:

这是由于El Capitan(10.11)中引入的System Integrity Protection功能。从El Capitan开始,kext-dev-mode启动选项无效,因此ParaDevil的答案不起作用。相反,您必须按照this page

中的说明禁用SIP
  1. 通过重新启动计算机并在启动时按住Command和R键来启动恢复操作系统。

  2. 从“工具”菜单启动终端。

  3. 运行以下命令:

    csrutil disable
    
  4. 重新启动时,应禁用系统完整性保护。