使用启用了Kext证书的代码签名在kextload期间失败,“代码签名无效”

9

所以我们有一个证书,允许我们签署kexts, 但当我们运行 > sudo kextload friendly.kext 时,它失败了。 我们签署了想要的kext,并为了证明它已经签署了,这里是一些诊断输出:

codesign --verify -vvvv friendly.kext

friendly.kext: valid on disk
friendly.kext: satisfies its Designated Requirement

spctl -a -vvvv friendly.kext

friendly.kext: accepted
source=Developer ID
origin=Developer ID Application: Friendly Corporation 
/Library/Extensions 

codesign -dvvv friendly.kext

Executable=/Library/Extensions/friendly.kext/Contents/MacOS/friendly
Identifier=com.friendly.friendly
Format=bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=502 flags=0x0(none) hashes=18+3 location=embedded
Hash type=sha1 size=20
CDHash=a1e2bf8d53ea67c6cfe9fc3d6d2001fe56c838a7
Signature size=8528
Authority=Developer ID Application: Friendly Corporation
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=Oct 9, 2014, 11:49:02 AM
Info.plist entries=21
TeamIdentifier=1234567890
Sealed Resources version=2 rules=12 files=1
Internal requirements count=1 size=180

codesign --verify -vvvv friendly.kext

friendly.kext: valid on disk
friendly.kext: satisfies its Designated Requirement 

看起来签名是正确的; 但是当我运行命令 > sudo kextutil -v friendly.kext 时:

Defaulting to kernel file '/System/Library/Kernels/kernel'
Diagnostics for /Library/Extensions/friendly.kext:
Code Signing Failure: code signature is invalid
/Library/Extensions/friendly.kext appears to be loadable (not including linkage for on-disk libraries).
ERROR: invalid signature for com.techsmith.friendly, will not load 

我在考虑可能是我下载证书的方式有误(我们肯定已经获得了kext签名的批准),尽管我之前曾试过重新下载证书,所以这可能不是问题所在。 否则,可能是我签名的方式有问题。我想也许这与我在签名之前设置的kext权限有关?

有人之前见过这个问题吗?

提前感谢!

1个回答

13
内核扩展签名证书必须具有扩展名“(1.2.840.113635.100.6.1.18)”-这是将其指定为支持内核扩展的证书的标志。您可以通过在Keychain Access.app中查看来轻松验证此内容(它在底部附近列出,位于扩展“(1.2.840.113635.100.6.1.13)”下面,我认为该扩展用于应用程序,因此存在于所有Developer ID证书中)。

是这样的,我有一个正在运行的shell脚本,我忘记更新了,但基本上签署了我的正确签名。所以我签名是正确的,但是然后shell脚本会用无效的证书覆盖它哈哈。昨天状态不太好。 - A O
显然,对于新证书,kext签名不再可用...那些已经拥有它们的人,请享受吧!https://dev59.com/sITba4cB1Zd3GeqP-sSR - gimix
据我所知,开发者ID证书默认情况下从未启用kext签名。Kext签名检查是在OS X 10.9中引入的,我的客户在10.9仍处于beta版本时就要求使用支持kext的开发者ID。 - pmdj
@pmdj 我不能确定。根据苹果在2013年WWDC的文档,可以通过标准流程在苹果开发者门户网站上请求。应用程序的开发者ID也包括kexts的权限。 - gimix
3
自从引入以来,这个内容没有改变。 表格在这里(通过开发人员ID页面的ling):https://developer.apple.com/contact/kext/ 一旦您获得批准,就可以重新请求用于应用程序的开发人员ID,该ID将与kext签名要求兼容。 - pmdj
@pmdj 非常感谢您提供的链接! - deucalion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接