如何验证macOS的pkg已获得公证

19

我要如何确认一个 macOS 安装程序的 pkg 文件是否已经被公证?是否有一个命令行工具可以做到这一点?

2个回答

22

很遗憾,这里有不止一个正确答案。

认证过程是通过将文件包、应用或二进制文件上传到苹果服务器来完成的。苹果会对其进行验证。如果基础格式支持,您可以下载该“票证”并“附加”它。值得注意的是,即使未附加票证,它也会被认证。Gatekeeper会在运行时与苹果服务器进行验证。

您可以使用staple命令检查是否已附加了票证。但是,您可以使用spctl获得更广泛的答案,以确定Gatekeeper是否会接受它。

还有一个问题——2019年8月之前注册的Apple开发者帐户不需要经过认证就可以使用(至少在Mojave上是如此)。这可能会让人感到非常困惑,难以判断情况。

以下是一些未签名、已签名和已认证的二进制文件示例。这里没有使用任何票证。

使用几年前注册的苹果开发者帐户。Gatekeeper检查不需要认证:

$ spctl -a -vvv -t install go-hello-unsigned
go-hello-unsigned: rejected
source=no usable signature

$ spctl -a -vvv -t install go-hello-signed-oldapple
go-hello-signed-oldapple: accepted
source=Developer ID
origin=Developer ID Application: Example Inc (oldapple)

$ spctl -a -vvv -t install go-hello-notarized-oldapple
go-hello-notarized-oldapple: accepted
source=Notarized Developer ID
origin=Developer ID Application: Example Inc (oldapple)

使用更新的苹果开发者账户。需要遵守公证要求:

$ spctl -a -vvv -t install go-hello-unsigned
go-hello-unsigned: rejected
source=no usable signature

$ spctl -a -vvv -t install go-hello-signed-newapple 
go-hello-signed-newapple: rejected
source=Unnotarized Developer ID
origin=Developer ID Application: Kolide, Inc (newapple)

$ spctl -a -vvv -t install go-hello-notarized-newapple
go-hello-notarized-newapple: accepted
source=Notarized Developer ID
origin=Developer ID Application: Kolide, Inc (newapple)

更新

现在Catalina已经发布,情况有所改变。签名密钥的年龄影响Mojave。Catalina现在要求所有内容都必须经过公证。


1
这对于 pkg 文件也是真的吗? - craig65535
它被这样记录,但我没有直接测试过。 - seph
3
是的,对于.pkg文件也是有效的。我刚刚测试了带有公证和未经公证的.pkg安装程序,并且得到了预期的结果。 - yfede

15

stapler validate将执行此操作 -

$ stapler validate myfile.pkg 
Processing: myfile.pkg
The validate action worked!
  • 如果打印出 The validate action worked!,则指定的pkg文件已经通过了公证。

  • 如果打印出 does not have a ticket stapled to it.,则指定的pkg文件未被公证,或公证过程中没有进行stapling步骤


3
它会告诉你公证票据是否钉在包裹上,这和其他情况有些不同。 - seph
1
是的,但公证是钉扎的要求,因此依赖它是一个很好的试金石,即使这不是OP寻找的确切答案。如果没有钉扎,没有互联网连接的计算机可能会显示软件包不受信任。 - tresf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接