时间戳证书过期是否影响Windows下代码签名文件的有效性?
时间戳证书过期对Windows已签名文件有效性的影响分析
核心结论
- 时间戳证书仅需在签名操作发生时有效,验证阶段过期不会影响已签名文件的有效性
- 根证书的影响取决于是否被吊销或移除信任:单纯过期且未被吊销的根证书,不会影响验证;若根证书已被微软从信任根存储中移除(如因安全问题吊销),则会导致验证失败
详细解释
时间戳证书的作用与验证逻辑
时间戳的核心作用是证明代码签名操作发生在代码签名证书的有效期内,避免代码签名证书过期后,签名被判定无效。
按照Authenticode的标准逻辑,时间戳机构(TSA)的证书只需满足:
- 在签名生成的时间点处于有效期内
- 签名时未被吊销
- 签名时属于受信任的根证书链
验证时,Windows会检查时间戳本身的签名是否在TSA证书的有效期内生成,而非要求TSA证书在当前验证时刻仍有效。
根证书的影响
根证书的有效性判断会结合时间戳回溯:
- 如果根证书只是单纯过期,但在签名时刻是受信任的,且未被吊销,Windows会回溯到签名时的信任状态,验证仍会通过
- 如果根证书已被微软从信任根列表中移除(比如因安全漏洞被吊销),即使签名时有效,当前验证也会失败
Windows版本差异
- Windows 7及更早版本:旧版Authenticode验证逻辑存在缺陷,错误要求时间戳证书在验证时刻仍有效。因此当TSA证书过期后,会导致签名验证失败。
- Windows 8/10/11:微软修复了验证逻辑,严格遵循标准,仅要求时间戳证书在签名时刻有效,验证时过期不影响签名有效性。
测试验证实例
在Windows 10环境下测试过期的Skype安装包Skype-8.55.0.141.exe:
- 代码签名证书(Skype Software Sarl):2020年3月27日过期
- 时间戳证书(Microsoft Time-Stamp Service):2021年2月11日过期
- 测试时间:2022年9月30日
三种验证方式均显示签名有效:
- 使用
signtool.exe verify命令:无警告或错误,返回签名有效 - 资源管理器查看数字签名:显示“数字签名正常”
- PowerShell执行
Get-AuthenticodeSignature:返回Status字段为Valid
内容的提问来源于stack exchange,提问作者Martin Ba
相关产品推荐
相关产品推荐

