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美元的苹果年度"使用费"?
只有 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 之外的根证书
归档时间: |
|
查看次数: |
4542 次 |
最近记录: |