【问题标题】:kextutil says my kernel extension signature is invalid, but code sign says it is valid. It does not loadkextutil 说我的内核扩展签名无效,但代码签名说它是有效的。它不加载
【发布时间】:2017-11-10 21:57:23
【问题描述】:

这是我第一次尝试签署内核扩展,所以我对自己做错的可能性持开放态度。

我向 Apple 申请了内核签名证书。我被要求填写一个表格,证明我确实需要创建一个内核驱动程序,而不是一个与 IOUserClient 通信的用户空间驱动程序。

$ sudo kextutil FL2000.kext/
Password:
Notice: /Library/Extensions/FL2000.kext has debug properties set.
Diagnostics for /Library/Extensions/FL2000.kext:
Code Signing Failure: code signature is invalid
Untrusted kexts are not allowed
ERROR: invalid signature for com.frescologic.FL2000, will not load

它不会在启动时加载——它需要加载,因为它是一个图形驱动程序。

$ codesign --verify -vvvv FL2000.kext/
FL2000.kext/: valid on disk
FL2000.kext/: satisfies its Designated Requirement

$ codesign --display -vvvv FL2000.kext/
Executable=/Library/Extensions/FL2000.kext/Contents/MacOS/FL2000
Identifier=com.frescologic.FL2000
Format=bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=1590 flags=0x0(none) hashes=44+3 location=embedded
Hash type=sha256 size=32
CandidateCDHash sha1=83a0328f9af971484b7e30c8d04e68a96dee72c1
CandidateCDHash sha256=cd6c72d17f00d2eed36078eece6a5b536c482772
Hash choices=sha1,sha256
Page size=4096
CDHash=cd6c72d17f00d2eed36078eece6a5b536c482772
Signature size=4693
Authority=Mac Developer: Michael Crawford (YU8CSARZFD)
Authority=Apple Worldwide Developer Relations Certification Authority
Authority=Apple Root CA
Signed Time=Nov 10, 2017, 1:10:07 PM
Info.plist entries=20
TeamIdentifier=444JK52Q93
Sealed Resources version=2 rules=13 files=2
Internal requirements count=1 size=184

帮助我哦 Stackoverflow-Wan。你是我唯一的希望!

【问题讨论】:

  • 在您的 kext 签名获得批准后,您是否使用该开发者帐户生成了新的开发者 ID 证书?在此之前颁发的任何证书都不会具有正确的证书扩展名。所需的扩展名是"( 1.2.840.113635.100.6.1.18 )"
  • 我没有那个扩展。我不清楚如何生成新的开发者 ID 证书。我想要一个用于生产,但该页面仅提供它们用于开发。
  • 我有两个 Mac 开发者证书,一个是我的电子邮件,另一个是我的名字。我想我的名字是由我的客户发行的。在任何情况下,证书都不包含该扩展名。
  • 我的团队管理员申请了新的开发者 ID 应用程序证书。它现在肯定有那个扩展名。但我的签名仍然无效。
  • 我让它工作了!明天我会写一个正确的答案,除非某个雇佣的刺客因为威胁要发布一个合理的解释而惹怒我。

标签: xcode macos certificate driver xnu


【解决方案1】:

我应该在您的codesign 输出中发现了这一点,但是您的 cmets 明确表示:问题出在您使用的证书上。 Apple 颁发 4 种 Mac 代码签名证书:

  1. “Mac 开发者” 证书用于在开发阶段签署用于 Mac App Store 的应用程序。这是您似乎试图用于签署 kext 的证书类型。这行不通。它会签名,但 kextd 等不会接受签名。
  2. “开发者 ID 应用程序” 证书用于签署将在 App Store 之外分发的应用程序。此类证书的一个特殊变体包括证书扩展“( 1.2.840.113635.100.6.1.18 )” - 使用此扩展,可以签署这样的 kext它们被 macOS 接受。
  3. “开发者 ID 安装程序” 证书用于签署安装程序 .pkg 文件/捆绑包。如果您通过 DMG 或 ZIP 文件分发应用程序,则不需要它,但如果您需要安装程序,可能是因为您分发的不是应用程序,而是 kext 或系统服务,那么您应该创建一个安装程序包并使用此类证书对其进行签名。
  4. “Mac 分发” 证书是您在将应用程序提交到 Mac App Store 之前用于签署应用程序版本的证书。这些也与 kext 签名无关。

大概出于安全原因,证书类型 2-4 仅颁发给 Apple 开发者帐户中的团队代理。低级开发人员只会获得“Mac 开发人员”证书,这些证书纯粹是临时的,因此与安全性不太相关。

总而言之,您的问题是您使用“Mac Developer”证书来签署 kext。您需要改用“开发人员 ID 应用程序”证书,特别是在开发团队获得 Apple 授予 kext 签名权限之后颁发的证书。如果您还没有申请 kext 签名权限,you can do so using this form。 (听起来您以前曾这样做过,但我指出这一点是为了让处于相同情况的人将来可能会偶然发现这一点。)

【讨论】:

    猜你喜欢
    • 2016-01-31
    • 2016-09-16
    • 1970-01-01
    • 2020-06-08
    • 2017-02-25
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多