当代码签名证书过期时会发生什么?

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

我不喜欢创build自己的证书是难以将其分发给将使用我的XBAP的所有客户机。 我的应用程序将只能用于局域网,所以我想我总是可以使用Windows安装程序来安装我的家酿制证书(虽然我不确定如何做到这一点 – 任何人有任何想法?)。

如果我提供部分信任应用程序,这并不是一个问题 – 但是我的应用程序需要Web权限,因为它将与WCF服务交谈,所以它处于部分信任和完全信任之间的灰色区域,没有证书,当我尝试加载我的XBAP时,我得到了这个乐趣。

有任何想法吗?

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

当您拥有自己的CA时,您需要安装的是您的CA根证书,因此CA证书将保持不变,因此不会再有更新用户证书的麻烦。 通常情况下,CA证书应该持续5 – 10年,但您可以根据需要进行configuration(请记住,它是您自己的CA)。

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

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

从Thawte代码签名证书常见问题 :

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

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

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

  • Microsoft®Authenticode®(多用途)允许您为签名代码添加时间戳。 时间戳确保代码在证书过期时不会过期,因为浏览器validation时间戳。 时间戳服务由威瑞信提供。 如果您在签署代码时使用时间戳服务,则将代码的散列发送到VeriSign的服务器以logging代码的时间戳。 用户的软件可以区分使用不应该信任的过期证书签名的代码和使用在代码签名时有效但随后过期的证书签名的代码。

注意WTD_LIFETIME_SIGNING_FLAG设置的证书:这意味着(尽pipe你介意从名字中得知)证书过期后签名的程序无效 ,即使程序没有改变,证书也是有效的签署了。

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

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


时间戳处理与生命周期签名语义

不需要时间戳签名的应用程序或证书颁发机构无限期validation成功有两种select:

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

如果除PKIX代码签名OID之外,发布者的签名证书还包含生存期签署者OID,则即使签名具有时间戳,签名在签名证书过期时也会失效。 生命期签署者OID定义如下:

szOID_KP_LIFETIME_SIGNING 1.3.6.1.4.1.311.10.3.13

调用WinVerifyTrust时,将WINDUST_DATA结构中的WTD_LIFETIME_SIGNING_FLAG设置为。

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

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

•签名在撤销date之前已加盖时间戳。

•签字证书仍在有效期内。 有效期到期后,签名无效。


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

这是StartSSL证书的严重问题。 我并不感到惊讶的是,在价格很低的证书中存在一些限制,但是将这种限制隐藏在印刷品中或旧的论坛post中,而不是在产品描述中明确说明是很差的业务。 他们可能会在将来修复它,而其他人可能有或没有相同的限制,所以在你花费之前检查一个电子邮件可能是明智的。

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

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

代码签名证书的原因非常昂贵,因此有人必须validation你是谁,你是谁。 在我的情况下,他们核实了地址和电话号码,并打电话给我。 Comodo的证书似乎稍微便宜些。

代码签名证书不是“pipe理的”,这意味着他们不更新自己…机会是你必须购买一个新的一旦到期。

你可以build立一个证书颁发机构(CA) – 坚持使用基于Windows的CA,如果你是一个只有Windows的商店,否则我会推荐Linux的DogTag证书系统 。

请注意,如果您创build自己的CA,则需要导出公共CA证书并在任何将运行由该证书颁发的代码签名证书签名的代码/脚本的服务器上进行安装(因此它作为根CA受信任) CA. 与每隔X年支付一次authentication相比,这远远便宜(免费) – 更不用说其他证书,您可以因各种原因/使用而发布!

在证书有效期内,您应该避免对签名过程打上时间戳或对其进行时间戳。 诸如Sign PE和其他工具允许您控制这些参数