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

时间:2014-02-21 09:26:31

标签: timestamp windows-xp certificate digital-signature burn

背景

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

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

问题

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

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

我尝试过什么

我安装了许多不同版本的“根证书更新”无济于事,包括the latest。如果这确实是解决方案,请告诉我which one我需要。

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

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

我的问题

是否有下载更新或“普通”用户可以采取的步骤,以便在XP / Vista中识别时间戳/会签? “普通”用户在这里意味着某人不具备计算机知识;我不是指管理员权限。

2 个答案:

答案 0 :(得分:6)

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

  • Proprietary:会签特性的版本字段(PKCS#7版本?)中的V1结果
  • 基于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

/tr州的signtool documentation

  

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

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

实施例

V1时间戳:

signtool.exe sign /f cert.pfx /p %passphrase% /t http://timestamp.comodoca.com/authenticode /d "Test" test.exe

V2时间戳:

signtool.exe sign /f cert.pfx /p %passphrase% /tr http://timestamp.comodoca.com/rfc3161 /d "Test" test-rfc3161.exe

答案 1 :(得分: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