XP/Vista上的数字签名时间戳"不可用",导致验证失败

lc.*_*lc. 5 timestamp windows-xp certificate digital-signature burn

背景

我有一个WiX/Burn安装包,其中包括安装ReportViewer 2012 Runtime.在Windows 7或更高版本的计算机上运行时,它可以正常工作.在XP(SP3)或Vista(SP1)上它失败了.

现在,检查ReportViewer可再发行组件的下载页面,我注意到它说它需要Vista SP2或更高版本.通常我会接受这个,但a)我认为这最近已经改变了,b)下载并手动安装这个可再发行的作品.可能有些部件在XP/Vista上不起作用,但出于我的意图和目的,它安装并运行得很好,尽管他们声称.

问题

检查安装日志文件说明数字签名验证失败.因此,我手动将可再发行组件包下载到Windows XP计算机上并检查其签名.签名在那里,但时间戳报告"不可用".点击详细信息还告诉我签名时间是"不可用".文件本身由过期的证书签名,因此如果没有此时间戳,自然验证将失败.

但是,如果我将同一文件下载到Windows 7计算机,则会显示时间戳.点击详细信息显示正确的签名,验证工作和安装.

我试过的

我安装了许多不同版本的"根证书更新"无济于事,包括最新版本.如果这确实是解决方案,请告诉我我需要哪一个.

我已经跟踪了签名上的证书链,并以"Microsoft Root Certificate Authority 2010"结束.此根证书似乎安装在XP计算机中.我唯一能看到的是这个证书的"2011"版本也在 "第三方根证书颁发机构"商店,而2010年则没有.我不知道这是问题的原因还是正常的.

我最终可能会使用禁用签名验证并使用基于散列的有效负载验证.但在此之前,我想知道我是否遗漏了一些明显的东西.

我的问题

是否有"正常"用户可以下载的更新或步骤,这将允许在XP/Vista中识别时间戳/会签?这里的"普通"用户意味着不具备计算机知识的人; 我不是指管理员权限.

tan*_*gle 6

似乎有两种时间戳记签名类型可用于Windows代码签名(Authenticode):

  • 专有:在签名属性V1版本字段(PKCS#7版本?)中生成
  • 基于RFC 3161:结果 V2

我没有找到明确说明这一点的任何文档,但通过测试,似乎Windows XP(安装了所有更新的SP3)仅支持版本的时间戳V1.带有版本的时间戳会V2导致"不可用"状态.当然,版本号可能只与结果相关 - 时间戳可能有另一个方面导致它被忽略.

当前可用的ReportViewer MSI文件具有V2时间戳.但是,在发布此问题之后,时间戳也是在2014年7月制作的.

更多背景:

Windows SDK signtool命令支持两个选项(对子命令signtimestamp子命令)以生成两种不同的时间戳类型:

  • /t <timestamp server URL>: 结果是 V1
  • /tr <RFC 3161 timestamp server URL>: 结果是 V2

signtool文档/tr状态:

Windows Vista及更早版本:不支持此标志.

但是,似乎不清楚(由于在其他选项上使用类似语句的方式)这是否适用于目标系统或signtool正在运行的系统.

例子

V1 时间戳:

signtool.exe sign /f cert.pfx /p %passphrase% /t http://timestamp.comodoca.com/authenticode /d "Test" test.exe
Run Code Online (Sandbox Code Playgroud)

V2 时间戳:

signtool.exe sign /f cert.pfx /p %passphrase% /tr http://timestamp.comodoca.com/rfc3161 /d "Test" test-rfc3161.exe
Run Code Online (Sandbox Code Playgroud)


Old*_*Pro 0

很难确切地说,但看起来这可能与http://technet.microsoft.com/en-us/security/advisory/2749655有关

根据 RFC3280,时间戳增强型密钥使用 (EKU) 扩展用于将对象的哈希值绑定到时间。这些签署的声明表明签名在特定时间点存在。它们用于代码签名证书过期时的代码完整性情况,以验证签名是否是在证书过期之前进行的。此问题是由于在 Microsoft 核心组件和软件的证书生成和签名过程中缺少时间戳增强型密钥使用 (EKU) 扩展而导致的。2012 年两个月使用的某些证书​​不包含 X.509 时间戳增强型密钥用法 (EKU) 扩展。

当证书不包含时间戳 EKU 时,即使签名包含时间戳,也会出现“时间戳不可用”之类的错误,我不会感到惊讶,因为在一定级别上就是这种情况,并且错误消息通常缺少这种类型细节。

您是否应用了http://support.microsoft.com/kb/2749655中的更新?

这次更新有什么作用?

此更新将有助于确保使用未使用时间戳增强型密钥使用 (EKU) 扩展的特定证书签名的所有软件的持续功能。为了扩展其功能,WinVerifyTrust 将忽略这些特定 X.509 签名缺少时间戳 EKU