【发布时间】:2014-11-09 17:08:52
【问题描述】:
目标:签署我自己的包和我自己的内核扩展。 “我自己的”在上下文中的意思是“我写的,或者我在别处选择的,从他们的源代码重新编译自己,并想安装在我的机器上。
问题:小牛队不接受我的 Code Signing Failure: code signature is invalid 签名(但会加载 kext),优胜美地甚至不会加载它。
我有自己的 CA 和代码签名证书。我已经能够成功地签署代码并设置允许安装和执行由给定证书签名的代码的策略 - codesign 和 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).
在 Mavericks 上,此 kext 加载时会显示警告消息,而在 Yosemite 上则不会。
我注意到here 和Apple CA CPS Developer ID 中的证书必须具有以下扩展名:( 1.2.840.113635.100.6.1.18 ) 以将其指定为 kext 签名证书。我的没有。我怀疑这是我的问题的原因,但不知道如何解决它。 spctl 中似乎没有类型选项来创建将给定证书指定为 kext 签名的策略。
如何添加此扩展程序(最好在 Keychain Certificate Assist 中,尽管基于 OpenSSL 的解决方案也可以),而无需支付 Apple 每年 100 美元的“使用费”?
【问题讨论】:
-
没有编译你自己的内核来接受用你的证书签名的 kexts,你需要从 Apple 那里得到一个。从好的方面来说,如果您想要的只是用于签署应用程序、安装程序和 kexts 的证书,则不需要每年支付 100 美元 - 开发人员 ID 证书在 5 年后到期,而不是 1 年。
-
谢谢,但我不确定我是否理解。 Developer Member Center 不允许一个人申请证书,直到/除非一个人注册特定的开发人员计划。 Mac Developer Program 的价格为每年 99 美元。我无法检查他们将颁发开发人员 ID 证书的时间。您是说一年后可以取消(或不续订)他的会员资格,但他的开发者 ID 证书不会再过期 4 年?
-
是的,续订不是自动的。根据我的经验,开发者 ID 证书在颁发后 5 年到期。因此,我想如果您在到期前不久申请新证书,您总共将获得将近 6 年的时间。我怀疑一旦您的证书过期,任何如此签名的软件都将无法通过网守验证,因此在网守阻止它之前只有几个月的时间在网络上发布软件可能不是一个好主意。请注意,5 年在软件领域是一段很长的时间。到那时,Mac 可能会在 ARM CPU 上运行,并且根本不允许使用第三方 kext。 ;-)
标签: macos osx-mavericks code-signing kernel-extension