在小牛队/优胜美地队无法签下kext?

Mou*_*use 6 macos code-signing kernel-extension osx-mavericks

目标:签署我自己的包和我自己的内核扩展.上下文中的"我自己的"意味着"我写的,或者我在其他地方选择的,从他们的来源重新编译自己,并希望在我的机器上安装.

问题:小牛队不接受我的签名Code Signing Failure: code signature is invalid(但加载了kext),Yosemite甚至不会加载它.

我有自己的CA和代码签名证书.我已经能够成功登录密码和设置,将允许安装由给定的证书签名的代码并执行的政策-无论是协同设计SPCTL喜欢它,因为你在下面的输出中看到.但是,这似乎不适用于kext(内核扩展) - kextutil坚持签名无效.这是我得到的输出:

$ codesign --verify -vvvv /opt/local/Library/Filesystems/osxfusefs.fs/Support/osxfusefs.kext
/opt/local/Library/Filesystems/osxfusefs.fs/Support/osxfusefs.kext: valid on disk
/opt/local/Library/Filesystems/osxfusefs.fs/Support/osxfusefs.kext: satisfies its Designated Requirement

$ spctl -a -vvv -t exec /opt/local/Library/Filesystems/osxfusefs.fs/Support/osxfusefs.kext
/opt/local/Library/Filesystems/osxfusefs.fs/Support/osxfusefs.kext: accepted
source=XXXXXCode
origin=XXXXXCoder
$ spctl -a -vvv -t install /opt/local/Library/Filesystems/osxfusefs.fs/Support/osxfusefs.kext
/opt/local/Library/Filesystems/osxfusefs.fs/Support/osxfusefs.kext: accepted
source=XXXXXInstall
origin=XXXXXCoder

$ kextutil -tn /opt/local/Library/Filesystems/osxfusefs.fs/Support/osxfusefs.kext
Diagnostics for /opt/local/Library/Filesystems/osxfusefs.fs/Support/osxfusefs.kext:
Code Signing Failure: code signature is invalid
/opt/local/Library/Filesystems/osxfusefs.fs/Support/osxfusefs.kext appears to be loadable (including linkage for on-disk libraries).
Run Code Online (Sandbox Code Playgroud)

在小牛队,这个kext加载了警告信息,在优胜美地上它不会.

我注意到这里Apple CA CPS Developer ID中的证书必须具有以下扩展名:( 1.2.840.113635.100.6.1.18 )将其指定为kext签名证书.我的没有它.我怀疑这是我的问题的原因,但不知道如何解决它.spctl中似乎没有类型选项来创建将指定证书指定为kext签名证书的策略.

如何添加此扩展程序(最好是在Keychain Certificate Assist中,虽然基于OpenSSL的解决方案也可以),还不能支付100美元的苹果年度"使用费"?

Col*_*ant 5

要向 Apple 请求 Kext 签名证书,您需要使用此表单

  • 当然可以,但是这个问题比那个表格更容易找到:我在表格之前很长一段时间就发现了这个问题。 (2认同)

Ale*_*ara 3

只有 Apple 可以使用此 OID 生成证书并将其视为对内核有效。

有关更详细的说明,请参阅tonymacx86.com 上的Kext 开发新增功能。这是相关部分。

OID 1.2.840.113635 是 Apple 的公司前缀,OID 的其余部分描述了证书“leaf”(签名证书)中必须存在哪些特定属性才能允许加载内核扩展。这意味着,只有使用 Apple 提供的证书(作为其 99 美元/年的开发者计划的一部分)才能创建有效的、经过签名的内核扩展,此外,感兴趣的各方必须填写一份特殊表格,解释为什么他们需要该证书;kext 证书仅在请求并获得批准时提供。

虽然可以生成具有特定 OID 的证书并使用您自己的 CA 对其进行签名,但 OS X 只能识别 Apple 的内核扩展 CA。Gatebreak 的文档简要提到了这一点。

更改 kextutil、kextd 和 kextcache 中嵌入的代码要求,以便它们允许除 Apple 之外的根证书