时间戳(Time Stamping)能够为代码签名证书提供长期有效的保护。借助时间戳服务器,软件在被执行签名的同时会被打上当前的日期标记。

当你对代码进行数字签名时,它证明了该软件是真实可信的,并且没有被篡改。但如果你的代码签名证书过期且没有时间戳,那么签名就会失效。代码签名时间戳帮助软件开发人员、IT 专业人员和企业,使已签名的各类应用程序、驱动程序、可执行文件和软件程序在长时间内持续保持受信任状态。它在签名中嵌入了一个由安全第三方签发的时间戳,使你的软件在证书生命周期结束之后依然长期有效。

代码签名时间戳如何长期维持软件信任

代码签名中的时间戳为数字签名附上了一个可验证的时间,确认软件是在何时被签名的。它保留了代码的原始性,支撑软件的真实可信,并防止软件因为证书过期或吊销而被标记为不受信任。当用户运行已签名的软件时,操作系统会校验其数字签名以确认它未被改动。如果没有时间戳,证书过期就可能触发"未知发布者"警告,更糟的情况下甚至会完全阻止安装。时间戳的作用在于让系统能够识别出:该软件是在证书仍然有效时签名的。这不仅让软件在证书过期后长期保持受信任,也实现了长期验证(LTV),使软件能够顺利通过安全检查。

时间戳如何验证代码签名的真实性

时间戳记录了代码被签名的精确时间,帮助用户和系统验证其真实性与安全性。整个过程遵循以下步骤:

代码签名中的哈希处理:使用 SHA-256 等安全哈希算法,为软件代码生成密码学哈希值。该哈希值相当于代码的唯一指纹,哪怕是最微小的改动也会产生不同的哈希。

向可信 TSA 请求时间戳:生成的哈希值会被发送给时间戳授权机构(TSA)——一个负责签发安全时间戳的独立可信实体。实际软件不会被发送,只有哈希值,以此保护机密性。

生成用于软件验证的时间戳令牌:TSA 将当前日期和时间附加到收到的哈希值上,再使用 TSA 的私钥对该信息进行数字签名,从而创建一个时间戳令牌。

返回时间戳令牌用于验证:TSA 将时间戳令牌发回客户端应用程序。该令牌确认了软件被签名的时间,并以密码学方式证明签名发生在 X.509 证书过期之前。

时间戳嵌入数字签名验证:软件的数字签名中嵌入了时间戳,确保今后任何一次验证都能证明它是在证书仍然有效时签名的。当用户日后安装或验证软件时,系统会检查时间戳并确认签名在签名时刻有效,从而使软件无限期保持受信任——即便证书已经过期或被吊销。

为什么时间戳在代码签名证书中如此重要

时间戳通过记录软件被签名的确切时间,为已签名的应用程序增加了一层可靠性。它有助于区分合法软件与已被篡改或过时的版本,即使证书过期或吊销,也能让软件保持可识别、有效。

防止过期证书使软件失效:没有时间戳的软件,一旦证书过期就可能被主流操作系统标记为不受信任,导致用户信任流失。

即便证书被吊销也依然可信:如果证书被吊销,时间戳能保证吊销之前施加的签名仍然有效。

满足安全合规标准:许多行业和监管合规要求都强制使用时间戳,以验证代码在分发时是在何时被签名的。

增强用户信心:用户和企业更倾向于安装那些在长时间内依然可验证的软件。

代码签名时间戳背后的技术原理

代码签名中的时间戳依赖公钥基础设施(PKI)和可信实体,来创建一份关于软件何时被签名的可验证记录,使数字签名即便在证书过期或被吊销后仍然有效。

公钥基础设施(PKI):PKI 构成了代码签名时间戳的支柱,它包含:证书颁发机构(CA),即签发数字证书以认证软件发布者的可信实体;非对称密码学,使用公私钥对确保签名可被验证而无法被伪造;安全哈希算法(SHA),如 SHA-256 和 SHA-512,生成软件的唯一指纹以防止未授权篡改。

时间戳授权机构(TSA):TSA 是一个独立的实体,提供关于签名何时被施加的密码学证明。它使用时间戳服务器接收已签名软件的哈希值(Sectigo 与 DigiCert 的时间戳服务器被广泛用于安全时间戳),在哈希上附加密码学时间戳以确认精确的签名时间,并使用自身私钥为时间戳令牌签名以验证真实性与完整性。

验证与签名流程:软件被签名时,其密码学哈希会生成并发送给 TSA 进行时间戳处理;主流 CA 提供安全的时间戳服务器,使发布者能够为已签名软件添加时间戳;TSA 随后返回附加在签名上的时间戳令牌;验证时,该令牌会与 TSA 的记录进行比对以确认真实性。即使原始签名证书过期或吊销,只要签名发生在该事件之前,带时间戳的签名依旧有效。

什么是软件签名证书的时间戳服务器

时间戳服务器是由时间戳授权机构提供的在线服务,它生成经密码学签名的时间戳,并基于符合 RFC 3161 规范的协议运行,提供业界广泛的兼容性与安全性。它们在 PKI 中扮演关键角色,提供关于数字签名何时被施加的不可篡改、防篡改的证据。

当软件发布者签名代码时,可以配置签名流程自动联系 TSA 的时间戳服务器。软件的密码学哈希被发送给 TSA,后者签发一个包含哈希值、精确签名时间以及 TSA 私钥数字签名的时间戳令牌。该令牌随后被嵌入到已签名的软件包中。由于这些令牌可使用 TSA 的公钥独立验证,它们提供了无可辩驳的证明:签名在签名时刻是有效的,即使签名证书已过期或被吊销。使用可信的时间戳服务器,无需人工干预即可为软件真实性建立长期信任。

代码签名时间戳的最佳实践

为提升代码签名时间戳的实效性,建议遵循以下最佳实践:

每一个已签名的可执行文件都应包含时间戳,以保留长期有效性。使用具备安全、高可用时间戳服务的知名证书提供商,可信的 TSA 能提供签名时间的密码学证明,避免证书过期或吊销带来的问题。采用 SHA-256 等强健的哈希函数可确保长期数据完整性,抵御量子计算攻击(老旧算法如 SHA-1 极易遭受时间戳被伪造或篡改的攻击)。虽然时间戳能保留信任,但在到期前续订证书仍有助于维持无间断的安全,良好维护的签名环境可降低凭证过时或泄露带来的风险。借助硬件安全模块(HSM)可防止对代码签名凭证的未授权访问,通过避免安全漏洞来强化时间戳流程的完整性。

如何获取可信的代码签名证书

你应当从允许对签名代码进行时间戳处理的受信任证书颁发机构处选择代码签名证书。借助可信的代码签名证书与时间戳服务器,开发者能够确保自己的软件在很长时间内保持可验证、受信任,而不会因过期而失效,有效防止代码被篡改并认证其完整性。