如何验证 macOS pkg 是否经过公证

cra*_*535 14 macos code-signing codesign notarize

如何验证 macOS 安装程序 pkg 文件是否已经过公证?是否有命令行工具可以执行此操作?

sep*_*eph 16

不幸的是,正确答案不止一个。

公证过程的工作原理是将包、应用程序或二进制文件上传到苹果。然后苹果会验证它。如果底层格式支持它,您可以下载该“票”并“装订”它。这里值得注意的是,您无需订书票即可进行公证。Gatekeeper 会在运行时用 apple 查找它。

您可以使用该staple命令检查是否有装订的票证。但是您可以使用它spctl来获得关于网守是否会接受它的更广泛的答案。

还有一个额外的问题——2019 年至 8 月之前的 Apple 开发者帐户免于公证要求。(至少在 Mojave 上。)这会使试图说出正在发生的事情变得非常混乱。

关于无符号、有符号和公证二进制文件的一些示例。这里没有订书钉。

使用几个旧的苹果开发者帐户。看门人检查不需要公证:

$ 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)
Run Code Online (Sandbox Code Playgroud)

使用较新的苹果开发者帐户。符合公证要求:

$ 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)
Run Code Online (Sandbox Code Playgroud)

更新

现在,catalina 已经发布,情况略有改变。签名密钥的年龄影响莫哈韦沙漠。Catalina 现在要求所有东西都经过公证。

  • 是的,它对于 pkg 文件也有效,我现在已经使用 Notarized 和 Unnotarized .pkg 安装程序对其进行了测试,并获得了两者的预期结果 (2认同)

cra*_*535 12

stapler validate 会这样做 -

$ stapler validate myfile.pkg 
Processing: myfile.pkg
The validate action worked!
Run Code Online (Sandbox Code Playgroud)
  • 如果The validate action worked!打印,则对指定的 pkg 文件进行公证。

  • 如果does not have a ticket stapled to it.打印,则指定的 pkg 文件要么没有经过公证,要么公证从未跟上装订步骤

  • 它会告诉您公证票是否已钉在包裹上。这有些不同。 (3认同)