Skip to content

验证签名与时间戳 ​

对最终准备分发的 EXE 或 DLL 进行检查,确认它由预期发布者签名且没有在签名后被修改。

在 Windows 中检查 ​

右键文件,打开 属性 → 数字签名,选择签名并查看详细信息。核对签名者组织名称、证书信息,以及时间戳相关信息。

没有“数字签名”页时,先确认检查的是最终签名文件,而不是未签名的原始副本。

使用 SignTool 检查 ​

安装 Windows SDK 后,在可以调用 signtool.exe 的 PowerShell 中运行。将路径替换为您的文件:

powershell
$ErrorActionPreference = 'Stop'
signtool.exe verify /pa /all /v /tw "C:\release\your-app.exe"
if ($LASTEXITCODE -ne 0) {
    throw "签名验证失败或存在警告,请检查上方输出。"
}

/pa 使用应用程序的 Authenticode 验证策略;/all 检查全部签名;/v 展示详细结果;/tw 在缺少时间戳时给出警告。这里将警告也视为需要处理的结果。

检查输出中的发布者和证书,确认与预期一致。验签通过只说明该签名满足验证条件,不代替核对签名身份。

自动化检查发布者 ​

PowerShell 可进一步读取文件签名信息:

powershell
$signature = Get-AuthenticodeSignature -LiteralPath "C:\release\your-app.exe"
$signature | Select-Object Status, StatusMessage
$signature.SignerCertificate | Select-Object Subject, Thumbprint
$signature.TimeStamperCertificate | Select-Object Subject, NotAfter

应看到 Status 为 Valid、预期的签名证书,以及时间戳证书信息。证书指纹用于与您的签名证书核对。完整自动化检查见 命令行签名。

结果不符合预期 ​

现象下一步
文件未签名检查签名任务和输出文件路径
发布者不正确核对规则选择的证书或命令行中的证书指纹
文件摘要不匹配重新构建,并在最后一次修改后重新签名
没有时间戳检查时间戳配置与网络,重新完成签名及验签
不受信任或吊销检查失败查看详细错误,检查验证机信任链、系统时间和网络
签名有效但仍有 SmartScreen 提示阅读 SmartScreen 说明

本页检查应用程序签名;驱动程序应按对应发布流程验证。更多问题见 常见问题与排查。

参考:Microsoft SignTool、Get-AuthenticodeSignature。