首页 > 解决方案 > 在 Mac 上使用 codesign 实用程序时是否默认启用时间戳?

问题描述

我正在使用 codesign 实用程序在 mac 上签署文件。命令是: codesign --sign <IDENTITY> --keychain <KEYCHAIN_PATH>

当我验证我的签名有效负载时,我会看到以下字段:

Format=Mach-O thin (x86_64)
Hash type=sha256 size=32
CandidateCDHash sha256=
Hash choices=
CDHash=
Signature size=
Authority=Developer ID Application: <Signing Identity>
Authority=Developer ID Certification Authority
Authority=Apple Root CA
**Timestamp=May 6, 2020 at 1:39:04 AM**
Info.plist=
TeamIdentifier=
Sealed Resources=none

这是否意味着默认情况下有效负载带有时间戳?我还阅读了 Apple 的技术说明,它在证书有效性下声明了以下内容:

默认情况下,开发人员 ID 签名带有加密时间戳。具有加密时间戳的签名会根据签名时间进行验证,使用过期(在签名时)证书进行的签名是无效的。前面的讨论仍然适用于没有安全时间戳的开发者 ID 签名。

https://developer.apple.com/library/archive/technotes/tn2206/_index.html#//apple_ref/doc/uid/DTS40007919-CH1-TNTAG7

我是否需要做任何特定的事情来确保启用时间戳?还是默认开启?

标签: macostimestampcodesigncode-signing-certificate

解决方案


来自https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution/resolving_common_notarization_issues

默认情况下,Xcode 在构建过程中不包含安全时间戳作为应用程序代码签名的一部分。相反,它仅在存档(从 Xcode 10.2 开始)和导出工作流程期间添加安全时间戳。

您的签名表明您的情况是隐含的后一种情况。您可以在代码签名期间显式启用安全时间戳:

codesign --timestamp --sign <IDENTITY> --keychain <KEYCHAIN_PATH>

推荐阅读