0

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

我向 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。你是我唯一的希望!

4

1 回答 1

2

我应该在您的codesign输出中发现这一点,但您的评论清楚地表明:问题出在您使用的证书上。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 Distribution”证书是您在将应用程序提交到 Mac App Store 之前用来签署应用程序构建的东西。这些也与 kext 签名无关。

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

总而言之,您的问题是您正在使用“Mac Developer”证书来签署 kext。您需要改用“开发人员 ID 应用程序”证书,特别是在开发团队被 Apple 授予 kext 签名权限后颁发的证书。如果您尚未申请 kext 签名权限,您可以使用此表单来申请。(听起来你以前已经这样做了,但我指出它是为了让处于相同情况的人在未来可能会偶然发现这一点。)

于 2017-11-16T11:21:10.090 回答