应用程序签名/验证

Posted

技术标签:

【中文标题】应用程序签名/验证【英文标题】:Application signing/verification 【发布时间】:2011-07-13 22:03:46 【问题描述】:

我对 Windows 开发比较陌生,但刚刚完成了一个小项目。我想让我的应用程序像许多其他应用程序一样“经过验证”。例如,当您启动应用程序并弹出 UAC 时,它不会有带有黄色条的“发布者未知”消息,并且应该有一个“验证者:”部分。

我希望我解释正确。有谁知道如何做到这一点?我希望它不像 SSL 证书那样你必须付钱......

如果我的问题不清楚或者我没有以正确的方式解释它,请随时告诉我。谢谢!

【问题讨论】:

【参考方案1】:

不幸的是,是的,你确实需要付钱。

您需要的是代码签名证书。您可以从以下证书颁发机构获取它们: Thawte

VeriSign

或者,如果您正在寻找便宜的,我会从这里买一个,这就是我得到我的地方: Tucows

获得证书后,您可以将其集成到构建过程中以签署您的应用程序,它会显示您作为发布者的姓名。

【讨论】:

我明白了,感谢您提供的信息!获得证书后,我会使用 Visual Studio 中项目设置下的“签名”和“安全”选项卡来完成其余的工作,对吧? 您可以在这里获得折扣 Comodo 证书:secure.ksoftware.net/code_signing.html [披露:与网站无关。] Silence Dogood:Tucows 的折扣 Comodo 证书更便宜。 (-; 每个证书是否适用于一个可能产生的多个软件和修订版,还是只对一个有效? 您可以签署任何可执行文件。它没有锁定到特定的命名应用程序。【参考方案2】:

这被称为code signing。如果您想为自己生成自己的证书,可以按照this answer 中的说明进行操作。

正如伊顿建议的那样,如果您想要一台供公众使用,则必须付费。我最近从http://www.instantssl.com/code-signing/index.html 购买了一个用于我们的 BuildMaster 软件,为期 2 年,价格约为 340 美元。

对评论的回应:

如果我生成自己的证书,它将如何为我工作,而不是对其他人(公开)?

链接答案中的第 1 步和第 2 步创建一个自签名证书颁发机构 (CA),然后将其添加到您的 Windows 证书存储中。步骤 3 然后生成代码签名证书并指定颁发 CA(-ic 开关)。由于颁发者是在第 1 步中创建的 CA,然后在第 2 步中手动设置为受您信任,因此第 3 步中生成的代码签名证书似乎是由您机器上的受信任方签署的.

公众无法信任它,因为你们都生成了代码签名证书用于验证其创建者确实是他所说的那个人的权威。想象一下,如果你是邪恶的,并且在代码签名证书中放入虚假信息,上面写着签名者是 Microsoft.com 而不是 Aaron!如果没有受信任的权威机构来验证签名者的实际身份,所有证书都将毫无用处。

当您从受信任的 CA 订购证书时,他们会以某种方式验证您的身份。他们可能会要求您提供驾驶执照的扫描副本,如果它是用于以您的姓名签名,或者只有企业主才会喜欢公司章程(我们使用我们的 D&B D-U-N-S 编号来验证 Inedo)。

一旦他们验证了您或您公司的身份,他们就会向您发送一个受典型网络浏览器信任的证书,您可以使用该证书对您的可执行文件进行签名,并且公众可以确信实际上是您在签署它们,因为 CA将是您从哪个公司购买证书。如果您查看您最喜欢的网络浏览器的“选项”部分,您可以看到哪些 CA 被认为是可信的。

【讨论】:

谢谢。如果我生成自己的证书,它将如何对我有用,但对其他所有人(公开)无效? @Aaron - 我已更新帖子以回应您的评论。 另见我回答的“缺点”【参考方案3】:

除了按照@Eaton 的解释购买证书并按照@John Rasch 的建议自行创建自签名证书

您可以尝试来自http://cacert.org 的免费基于comunitee 的证书,其工作方式类似于 pgp/gpg-s 信任系统。对于协同设计,您需要至少 100 分的信任简历。

德国用户还可以使用免费的http://web.de 证书,该证书也允许共同签名。

这种方法(以及自行创建的证书)的缺点是“已验证”仅在执行客户端的操作系统安装了签名机构的根证书时才有效,而签名机构的根证书在 99% 中都不是案例。

但是 Firefox 知道 cacert.org,因此来自 cacert 的证书可以用于 https、java 和 silverlight,但不能用于标准 msie,而无需安装根证书。

【讨论】:

【参考方案4】:

您还可以从 StartCom (www.startssl.com) 以大约 49.90 美元的价格购买两年的代码签名证书 - 比 Thawte、Verisign 和其他公司便宜很多。

【讨论】:

以上是关于应用程序签名/验证的主要内容,如果未能解决你的问题,请参考以下文章

JWT/OAuth 令牌签名验证失败

有啥方法可以在 ionic 中验证应用程序签名?

应用程序身份验证 - 从命令行提取公共签名密钥

应用程序签名/验证

JAVA中的签名验证和签名长度

签名的 ClickOnce 应用程序给出“无法验证发布者”