如何验证 macOS 安装程序 pkg 文件是否已经过公证?是否有命令行工具来执行此操作?
2 回答
不幸的是,正确答案不止一个。
公证过程通过将包、应用程序或二进制文件上传到苹果来进行。然后Apple将对其进行验证。如果底层格式支持它,您可以下载该“票”并“装订”它。值得注意的是,您无需装订票即可对其进行公证。Gatekeeper 将在运行时使用苹果进行查找。
您可以使用命令检查是否有装订票staple
。但是您可以使用它spctl
来获得关于看门人是否会接受它的更广泛的答案。
还有一个额外的问题——2019 年至 8 月之前的 Apple Developer 帐户免于公证要求。(至少在莫哈韦沙漠上。)这会使试图说出正在发生的事情变得非常混乱。
关于无符号、有符号和经过公证的二进制文件的一些示例。这里没有订书钉。
使用几个旧的苹果开发者帐户。网守检查不需要公证:
$ 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 已经发布,这已经发生了轻微的变化。签名密钥的时代影响莫哈韦沙漠。Catalina 现在要求一切都经过公证。
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 文件要么未经过公证,要么公证后从未进行装订步骤。