验证Authenticode签名是否来自我们公司的自动更新程序

Jam*_*ton 10 c windows cryptography authenticode digital-signature

我正在实现自动更新功能,并需要一些有关如何使用最佳实践安全地执行此操作的建议.我想使用下载文件的Authenticode签名来验证它是否可以安全运行(即来自我们公司并且没有被篡改).我的问题与问题#2008519非常相似.

最底线的问题:检查自动更新功能的Authenticode签名的最佳,最安全的方法是什么?应检查证书中的哪些字段?要求是:(1)检查签名是否有效,(2)检查签名是否有效,(3)旧客户仍然可以在我的证书到期时更新,我得到一个新签名.

以下是我研究的一些背景信息/想法:我相信这可以分为两个步骤:

  1. 验证签名是否有效.我相信这应该很容易使用WinVerifyTrust,如http://msdn.microsoft.com/en-us/library/aa382384(VS.85).aspx中所述 - 我不认为这里有问题.

  2. 验证签名是否与我们公司相对应,而不是其他公司.这似乎是一个更难回答的问题:

一种可能性是检查签名中的一些字符串.可以通过MS KB文章#323809的代码获得,但是本文不会就应该为这种类型的应用程序(或任何其他类似的)检查哪些字段提出建议. 问题#1072540还说明了如何获取某些证书信息,但同样不建议实际检查哪些字段.我担心的是字符串可能不是最好的检查:例如,如果另一个人能够获得具有相同名称的证书,该怎么办?或者,如果我们有正当理由在将来更改字符串?

问题的人#2008519有一个非常相似的要求.他对"TrustedByUs"功能的需求与我的相同.但是,他通过比较公钥来进行检查.虽然这可以在短期内起作用,但似乎它不适用于自动更新功能.这是因为代码签名证书最长有效期为2 - 3年.因此,在将来,当我们在2年内购买新证书时,由于公钥的更改,旧客户将无法再更新.

Bri*_*ian 4

问题#2008519 的人有一个非常相似的要求。他对“TrustedByUs”功能的需求与我的相同。然而,他通过比较公钥来进行检查。虽然这在短期内可行,但似乎不适用于自动更新功能。这是因为代码签名证书的有效期最多为 2 - 3 年。因此,以后我们在2年后购买新的证书时,老客户端将因为公钥的变化而无法再更新。

由于担心的是应用程序信任您而不是某个人信任您,因此您可以仅使用自签名并将所需的任何公钥嵌入应用程序本身。这使您可以更好地控制该过程。当要求不受您控制的用户或应用程序给予信任时,这是不合适的,但在这种情况下,应用程序在您的控制之下,因此它可以正常工作。这使您可以轻松避免将其他人的类似证书误认为是您自己的证书。