GlobalSign 新闻 & 分享

软件版本已经回滚 代码签名应该怎么处理

分类:代码签名

时间:2026-09-22

软件版本已经回滚 代码签名应该怎么处理

线上版本回滚后,团队常会问:旧版本以前已经签过名,能不能直接重新放回下载页?多数情况下可以,但前提是取回的是原来经过验证的签名制品,而不是重新编译出的“同版本”文件。两者的版本号可能相同,文件哈希和审计意义却完全不同。

先判断回滚属于哪一种情况

回滚原因

旧安装包是否可继续分发

签名处理重点

新版本存在功能故障

通常可以,需确认旧版本仍受支持且无已知严重漏洞

从可信制品库恢复原文件并复验签名

新版本发布配置错误

通常可以

核对安装包哈希,避免把配置错误带回旧包

构建环境被入侵

不能直接判断

扩大核查范围,确认旧包是否来自同一受影响环境

签名私钥疑似泄露

不应仅凭时间戳继续分发

暂停发布,联系 CA 评估吊销并识别异常签名

旧版本本身有高危漏洞

不建议继续公开分发

寻找安全补丁版本或限制为受控恢复用途


回滚应用版本不等于回滚数字签名

代码签名绑定的是具体文件内容。安装包只要有一个字节发生变化,原签名就无法继续证明该文件未被改动。因此,回滚时应恢复制品库中已签名、已测试、已发布的旧文件,同时恢复与它对应的哈希、发布清单和测试记录。

如果团队重新编译旧代码,即使版本号不变,也会生成新的制品。新的文件需要重新完成测试、审批和签名,不应借用原文件的签名状态。为了避免用户看到同一个版本号对应两个不同哈希,通常还要增加构建号或修订号。

可信时间戳解决的是证书到期问题

GlobalSign 对代码签名的说明指出,签名时加入可信时间戳后,文件在代码签名证书到期后仍可保持有效,前提是签名时证书有效,且文件没有被修改。时间戳并不能证明旧版本没有安全漏洞,也不能把使用泄露私钥生成的签名变成安全签名。

因此,证书到期与证书被吊销应分开处理。到期是正常生命周期事件;吊销通常意味着私钥泄露、错误签发或证书被用于可疑代码等风险。遇到后者,应依据CA 的调查和吊销规则评估受影响文件,不能只看安装包上是否有时间戳。

旧安装包重新上架前做四次核对

1.  核对来源。从只读制品库或已验证的发布归档恢复文件,不从个人电脑、群聊附件或临时网盘取包。

2.  核对哈希。将文件哈希与原发布记录、软件物料清单或下载页存档比对,确认取回的是同一个制品。

3.  核对签名。检查发布者名称、证书链、签名状态和时间戳,同时确认签名后文件没有被修改。

4.  核对风险。确认旧版本没有未修复的严重漏洞、被停用的依赖或已经失效的后端接口,并明确继续支持的期限。

下载页和更新服务需要同步调整

回滚并非只替换一个安装包。官网、应用内更新、镜像站、软件仓库和 CDN 可能保留不同版本。团队应以文件哈希作为识别依据,统一下架故障版本,并在下载页说明当前推荐版本及回滚原因。若客户必须保留问题版本用于取证,应放入权限受控的归档区,而不是继续公开分发。

更新服务还要防止“版本震荡”。例如客户端已经升级到故障版本后,回滚策略是否允许降级;旧版本启动后会不会再次拉取故障版本;自动更新元数据是否已经重新签名并同步到所有节点。这些问题与代码签名不同,却常在同一次回滚中出现。

私钥事件需要单独处置

如果回滚与签名系统异常同时发生,应立即停止使用相关证书继续签名,保存签名日志,并列出异常时段内所有签名文件。随后与 CA联系,确认是否需要吊销证书。已经签名的文件是否继续可信,应依据签名时间、吊销原因、验证平台规则和文件调查结果判断,不能用一条通用结论覆盖所有平台。

新证书签发后,不要无差别地把全部历史安装包重新签一遍。仍在维护且确有分发需求的版本,可以按风险和渠道重新构建或重新签名;已经停止支持的版本更适合保留验证记录并停止公开下载。

发布团队可以采用的记录格式

字段

记录内容

制品身份

产品名、版本号、构建号、文件名和 SHA-256 哈希

签名信息

发布者、证书序列号、签名时间和时间戳状态

回滚决策

回滚原因、批准人、推荐版本和支持截止日期

渠道状态

官网、更新服务、镜像站和合作分发渠道的上下架结果

风险结论

漏洞检查、私钥调查和证书吊销状态


对外发布时,最稳妥的做法是让每个版本对应一个不可变制品和一个可追溯哈希。这样,代码签名证明文件来源和完整性,发布记录解释为什么此刻仍允许分发。两类证据各自回答不同的问题。

相关推荐

  • 最新
  • TLS/SSL
  • 代码签名
  • eIDAS
  • ACME
  • 数字证书
  • 自动化