kextutil说我的内核扩展签名无效,但代码签名表示它是有效的。它没有加载

时间:2017-11-10 21:57:24

标签: xcode macos certificate driver xnu

这是我第一次尝试签署内核扩展,所以我很乐意我做错了。

我要求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

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

1 个答案:

答案 0 :(得分:2)

我应该在您的codesign输出中发现这一点,但您的评论明确指出:问题在于您使用的证书。 Apple发布了4种Mac代码签名证书:

  1. “Mac Developer”证书用于在开发阶段签署发往Mac App Store的应用。这是您尝试用于签署kext的证书类型。这不行。它会签好,但kextd等不接受签名。
  2. “开发者ID应用程序”证书用于签署将在App Store外部分发的应用程序。此类证书的特殊变体包括证书扩展名“(1.2.840.113635.100.6.1.18)” - 此扩展名,可以签署kexts,以便macOS接受它们。
  3. “开发者ID安装程序”证书用于签署Installer .pkg文件/分发包。如果您通过DMG或ZIP文件分发应用程序,则不需要这样,但如果您需要安装程序,可能因为您分发的内容不是应用程序,而是kext或系统服务,那么您应该创建安装程序包并使用此类证书对其进行签名。
  4. “Mac发布”证书是您在将应用程序提交到Mac App Store之前签署应用程序版本的方法。这些也与kext签名无关。
  5. 可能出于安全原因,证书类型2-4仅发布给Apple Developer帐户中的Team Agents 。低开发人员只获得“Mac开发人员”证书,这些证书纯粹是临时性的,因此它们与安全无关。

    总而言之,您的问题是您使用的是“Mac Developer”证书来签署kext。您需要使用“开发者ID应用程序”证书,特别是在开发团队被Apple授予kext签名权限后颁发的证书。如果您尚未申请kext签名权限,you can do so using this form。 (听起来你之前已经这样做了,但是我指的是为了同样情况下可能在将来偶然发现这种情况的人的利益。)