我正在实现自动更新功能,需要一些有关如何使用最佳实践安全地执行此操作的建议。我想使用下载的文件的 Authenticode 签名来验证它是否可以安全运行(即源自我们公司并且未被篡改)。我的问题与问题#2008519 非常相似。
最根本的问题是:检查自动更新功能的 Authenticode 签名的最佳、最安全的方法是什么?应检查证书中的哪些字段?要求是:(1)检查签名是否有效,(2)检查这是我的签名,(3)当我的证书过期并且我得到新的证书时,旧客户端仍然可以更新。
以下是我的研究中的一些背景信息/想法:我相信这可以分为两个步骤:
验证签名是否有效。我相信使用 WinVerifyTrust 应该很容易,如中所述http://msdn.microsoft.com/en-us/library/aa382384(VS.85).aspx- 我预计这里不会出现问题。
验证签名是否对应于我们公司,而不是其他公司。这似乎是一个更难回答的问题:
一种可能性是检查签名中的某些字符串。可以通过 MS 知识库文章 #323809 中的代码获取,但本文并未就此类应用程序(或任何其他应用程序)应检查哪些字段提出建议。问题#1072540还说明了如何获取一些证书信息,但同样不建议实际检查哪些字段。我担心的是,字符串可能不是最好的检查:例如,如果另一个人能够获得同名的证书怎么办?或者我们将来是否有正当理由更换琴弦?
该人位于问题#2008519有一个非常相似的要求。他对“TrustedByUs”功能的需求与我的相同。然而,他通过比较公钥来进行检查。虽然这在短期内可行,但似乎不适用于自动更新功能。这是因为代码签名证书的有效期最多为 2 - 3 年。因此,未来当我们在两年后购买新证书时,老客户端将因公钥发生变化而无法再更新。
问题#2008519 的人有一个
非常相似的要求。他的需要
“TrustedByUs”功能是相同的
到我的。然而,他继续做
通过比较公钥进行检查。
虽然这适用于
短期看来不会
致力于自动更新功能。
这是因为代码签名
证书仅对 2 - 3 人有效
最长年数因此,在未来,
当我们在 2 购买新证书时
几年了,老客户就不会了
能够继续更新,因为
公钥的改变。
由于担心的是应用程序信任您而不是某人信任您,因此您可以仅使用自签名并将应用程序本身所需的任何公钥嵌入其中。这使您可以更好地控制该过程。当要求不受您控制的用户或应用程序给予信任时,这是不合适的,但在这种情况下,应用程序在您的控制之下,因此它可以正常工作。这使您可以轻松避免将其他人的类似证书误认为是您自己的证书。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)