57

我正在考虑从 VeriSign 或 Thawte 购买代码签名证书来签署 XBAP。我的问题是:该证书到期时会发生什么?299 美元和 599 美元对于 1 年/2 年证书来说是相当高的价格,如果我必须在证书到期时向我的客户交付新签名的版本,那么我只需处理创建自己的证书的麻烦现在。

我不喜欢创建自己的证书的地方在于难以将其分发到将使用我的 XBAP 的所有客户端计算机。我的应用程序只会在 LAN 上使用,所以我想我总是可以使用 Windows Installer 来安装我自制的证书(尽管我不确定如何做到这一点 - 任何人有任何想法吗?)。

如果我交付的是部分信任的应用程序,这真的不是问题 - 但我的应用程序需要 Web 权限,因为它将与 WCF 服务通信,因此它位于部分信任和完全信任之间的灰色区域,并且没有证书,当我尝试加载我的 XBAP 时,我收到了有趣的 ole Trust Not Granted 消息。

有任何想法吗?

4

8 回答 8

92

如果您 在证书有效时为您的代码添加时间戳,则效果是您的过期证书是好的。

来自Thawte 代码签名证书常见问题解答

我可以使用代码签名证书多长时间?

  • 代码签名证书的有效期为 1 年或 2 年,具体取决于您购买证书时选择的生命周期。请注意:对于 Microsoft® Authenticode®(多用途),您还应该为您的签名代码添加时间戳,以避免您的代码在证书过期时过期。

代码签名证书过期后带时间戳的代码是否有效?

  • Microsoft® Authenticode® (Multi-Purpose) 允许您为您的签名代码添加时间戳。时间戳确保在证书过期时代码不会过期,因为浏览器会验证时间戳。时间戳服务由 VeriSign 提供。如果您在签署代码时使用时间戳服务,您的代码的哈希将被发送到 VeriSign 的服务器以记录您的代码的时间戳。用户的软件可以区分使用不应信任的过期证书签名的代码和使用在代码签名时有效但随后已过期的证书签名的代码。
于 2010-08-06T23:01:51.993 回答
30

注意设置了 WTD_LIFETIME_SIGNING_FLAG 的证书:这意味着(尽管您介意从名称中假设)使用该证书签名的程序在证书到期后无效,即使该程序没有更改,并且证书在它生效时是有效的已签署。

这也会影响更新,因为即使客户选中该框以信任您公司的所有程序,如果您的更新程序没有使用相同的证书(或该证书过期)签名,那么信任也会失败。

来自:http: //download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Authenticode_PE.docx


使用生命周期签名语义的时间戳处理

不希望时间戳签名无限期成功验证的应用程序或证书颁发机构有两种选择:

• 在发布者的签名证书中设置生命周期签名者OID。

如果发布者的签名证书除了包含 PKIX 代码签名 OID 之外还包含生命周期签名者 OID,则即使签名带有时间戳,当发布者的签名证书过期时,签名也会变得无效。生命周期签名者 OID 定义如下:

szOID_KP_LIFETIME_SIGNING 1.3.6.1.4.1.311.10.3.13

• 调用WinVerifyTrust 时,在WINTRUST_DATA 结构中设置WTD_LIFETIME_SIGNING_FLAG。

如果 WinVerifyTrust 调用方在 WINTRUST_DATA 结构中设置 WTD_LIFETIME_SIGNING_FLAG 并且发布者的签名证书已过期,则 WinVerifyTrust 将签名报告为无效,即使签名带有时间戳也是如此。

如果发布者撤销了包含生命周期签名者 OID 的代码签名证书,或者 WinVerifyTrust 调用者在 WINTRUST_DATA 结构中设置了 WTD_LIFETIME_SIGNING_FLAG,则如果满足以下两个条件,WinVerifyTrust 将报告签名为有效:

• 签名在撤销日期之前加盖时间戳。

• 签名证书仍在有效期内。有效期届满后,签名失效。


例如: https ://forum.startcom.org/viewtopic.php?f=15&t=2215&p=6827&hilit=lifetime+signing#p6827

这是 StartSSL 证书的一个严重问题。成本如此之低的证书中存在限制并不让我感到惊讶,但是将这种限制隐藏在细则或旧论坛帖子中而不是在产品描述中明确表示是糟糕的业务。他们将来可能会修复它,而其他人可能有也可能没有相同的限制,因此在您花钱之前检查电子邮件可能是明智的。

猜猜谁不知道问?大声笑......哦,好吧,生活和学习。

于 2011-03-16T23:28:51.030 回答
13

如果您确保在签署二进制文件时添加时间戳,则无需在证书到期时重新签署它们。只需在 signtool 的命令行中添加“/t http://timestamp.verisign.com/scripts/timstamp.dll ”,数字签名将始终标记为有效,除非证书被吊销并且 CA 是受信任的。

代码签名证书如此昂贵的原因是有人必须验证你是你所说的那个人。就我而言,他们验证了地址和电话号码,并给我打电话。不过,Comodo 的证书似乎要便宜一些。

于 2010-08-04T22:03:58.190 回答
7

如果您打算在封闭(LAN)环境中使用它,您应该做的是设置您自己的 CA。Windows Server 版本包括易于使用的证书颁发机构,但更简单的是通过openssl提供的 demoCA 设置最小 CA ,它由几个脚本组成。您可以在 Windows 或本地的Cygwin中运行 openssl demoCA 。这个 demoCA 包含几个 perl/bash 脚本,它们调用 openssl 命令来生成请求、签署证书/crls 等。

当您拥有自己的 CA 时,您需要安装的是您的 CA 根证书,因此更新用户证书将不再有麻烦,因为 CA 证书将保持不变。通常,CA 证书应持续 5-10 年,但您可以随意配置(请记住,它是您自己的 CA)。

CA 证书将安装在每台客户端计算机上。如果您的应用程序信任 Windows 系统安全性,则应将其安装在 IExplorer 证书颁发机构密钥库中。如果您使用 Java 应用程序,那么您应该在您使用的 Java 密钥库中分发 CA 证书。

于 2008-11-30T22:22:36.770 回答
1

刚遇到这个问题。我在这篇文章中找到了解释,并连同@BCran 的回答一起解决了它。概括:

  • 默认情况下,证书需要在验证期间有效(客户端打开程序时,而不是在编译时)
  • 要使证书永久有效,您需要使用 TimeStamping 服务器对程序进行签名。这证明您没有更改计算机的时间并使用旧证书。如果您使用 TimeStamping 服务器,则无需每次都对代码进行签名。

这就是你在 VS.NET 2017 中的做法,例如:

代码签名视觉工作室 2017

如果 URL 不起作用,您可以使用任何服务,这里有一堆起作用的 URL:https ://stackoverflow.com/a/9714864/72350

于 2019-09-24T17:29:26.353 回答
0

当心 WINDOWS 防御者。

你永远不希望你的证书过期,或者尽可能长,这似乎是 10 年。

一旦您的证书过期,Windows 将无法识别替换证书。您的应用程序排在队列的末尾,就好像它是由一个完全不同的组织签署的一样。

这意味着用户在下载时会收到讨厌的消息,并且可能根本无法运行您的代码,具体取决于组策略。这将一直持续到大量不同的人忽略了可怕的警告并安装了您的软件。

当然,时间戳服务器将使现有程序在证书到期后运行,但升级将是一个问题。

这对于本地使用的软件来说不是问题,但如果您想广泛分发您的软件,这将是一个大问题。

于 2020-08-26T02:07:25.767 回答
-1

BCran 写道:“代码签名证书如此昂贵的原因是有人必须验证你是你所说的那个人。”

称我为愚蠢,但有没有人想到开发人员可以在构建时自行计算其可执行应用程序的确切大小,以及是否将开发人员的身份包含在计算出的数字中,将哈希数插入应用程序的加密形式,并决定是否对应用程序进行时间限制或使其永久运行(因为用户机器上已经存在的可执行代码不太可能在 1、3、5、10 之后自行恶化或更改, 100, 100 万年)?

此外,如果有人可以验证您的电话号码和/或地址,也没有任何区别。如果开发人员选择,这些事情可以很容易地改变,而不是应用程序的代码。

优点:开发人员执行此任务不需要任何费用。同时,只要用户希望使用(或开发者允许使用),用户仍然可以放心使用有效且安全的应用程序,并且应用程序不会被篡改。还是苹果和微软等大玩家和证书颁发者必须诱使开发人员接受为这项服务持续付费?

注意:我对代码签名应用程序的天真和原始理解是防止任何人篡改应用程序的代码。但我越是看这个,它看起来更像是第三方个人和组织从开发人员那里赚钱的机会,从富人那里赚钱,而不是从不那么富有的人那里赚钱。好吧,总得有人去做,试图找出你是谁。但是我在互联网上看到的这项服务的价格差异很大,而且如此强调 1 年或 3 年的期限而没有永久签名应用程序的选项,这表明我们有一些人在城市里有非常昂贵的办公室来支付他们的费用租金和他们高昂的薪水。

为什么开发人员不要求 Apple 和 Microsoft 提供对开发人员的口袋更友好、对用户同样安全的安全解决方案?或者在下载时在开发者的网站上给出最终安装程序文件的确切大小(以字节为单位),用户可以检查。所陈述的任何额外或丢失的字节都应该足以告诉用户存在问题。强制开发人员拥有自己的网站,这样每个人都可以看到他们是谁以及从哪里获得合法且未经篡改的软件副本,并杜绝软件下载网站抓取开发人员软件的副本以从他们的网站下载。一切都应该在开发者的网站上完成,不要在其他地方完成。

于 2020-12-23T12:52:23.557 回答
-2

代码签名证书不是“托管”的,这意味着它们不会自行更新......一旦过期,您可能必须购买新证书。

您可以设置一个证书颁发机构 (CA) - 如果您是一家仅限 Windows 的商店,请坚持使用基于 Windows 的 CA,否则我会推荐 Linux 与DogTag Certificate System 之类的东西。

请注意,如果您创建自己的 CA,则需要导出公共 CA 证书并将其安装(因此它作为根 CA 被信任)将运行由该颁发的代码签名证书签名的代码/脚本的任何服务器加利福尼亚州。与每 X 年支付一次证书相比,这要便宜得多(免费?) - 更不用说您可能因各种原因/用途而颁发的其他证书!

于 2013-04-30T16:48:25.907 回答