3

我有这个可执行文件,用 vb.Net 编写并编译为 .Net Framework 2.0 的 Windows 可执行文件。因为我们使用软件白名单来防止 Windows 客户端上出现未知软件,所以此可执行文件是使用 Visual Studio 2008 Professional工作流进行强命名和签名的:

<SignFile
  CertificateThumbprint="1f 6c ... 33 b2"
  SigningTarget="$(TargetPath)"
  TimestampUrl="http://timestamp.verisign.com/scripts/timstamp.dll"
  ContinueOnError="false"
/>

为此,我们运行一个公司 RootCA,为每个公司分支运行一个中间 CA,并在每个分支之下运行一个发行 CA。“我的”发行 CA 向我提供了一份代码设计证书,该证书已在几个月前到期。

因为我在工作流程中使用了受信任的时间戳(Authenticode),所以在通过其文件属性检查签名时签名是 / 仍然有效,用户仍然能够在不触发 Windows AppBlocker 的情况下执行它。一切都很好。

现在,我被告知我的证书已被吊销,我可以通过查看 crl 来验证。根据CA管理,现在应该已经失效一个月了,但签名仍然有效。

Serial Number: 16C40CA0000000002A60
Revocation Date: Aug 10 06:18:00 2015 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Cessation Of Operation

我相信是 crl 中提供的原因导致了这种情况。根据RFC 3161,§4 Bullet 1:

当一个 TSA 不再被使用,但 TSA 私钥没有被泄露时,该机构的证书应被撤销。当与来自 TSA 的已撤销证书相关的 reasonCode 扩展出现在 CRL 条目扩展中时,它应设置为未指定 (0)、affiliationChanged (3)、已取代 (4) 或 cessationOfOperation (5)。在这种情况下,在未来的任何时候,使用相应密钥签名的令牌将被视为无效,但在撤销时间之前生成的令牌将保持有效。当与来自 TSA 的已撤销证书相关的 reasonCode 扩展不存在于 CRL 条目扩展中时,所有已使用相应密钥签名的令牌应被视为无效。因此,建议使用 reasonCode 扩展。

所以我的问题/问题包括:

  1. RFC 3161 是否也仅适用于代码签名证书或 TSA?
  2. 如果是,如果在撤销前以原因 5 CessationOfOperation 进行签名,签名是否仍然有效?
  3. 如果是,如果证书在过期后被发现受损,是否可以/是否应该使用不同的原因再次吊销证书?仍然可能有数百个有效签名!
4

2 回答 2

3
  1. 不,指定的 RFC 描述了时间戳协议和时间戳权限。它与代码签名证书无关
  2. 是的,在撤销之前所做的签名被认为是有效的
  3. 一个证书不能被多次吊销。如果它被撤销,那么它被撤销。

现在,我被告知我的证书已被吊销,我可以通过查看 crl 来验证

我假设您的证书是共同签名证书。您的应用程序仍在工作的原因是您在签署应用程序时使用了时间戳。时间戳保证您的签名是在指定时间进行的。此时您的证书是有效的。

于 2015-09-03T14:31:45.907 回答
0

上次我查看它时,我记得如下:当一个可执行文件启动时,无法尝试任何网络连接来验证用于签名的证书是否仍然有效。此外,要使签名有效,证书在签名时必须是有效——引用的 RFC 同意这一点。除了从有效根 CA 证书列表中删除根 CA 之外,没有其他方法可以追溯撤销此类签名。如果您只是删除或撤销链上的某些内容,则捆绑在可执行文件中的链仍将向下链接到根并因此验证。

于 2015-09-03T15:00:54.407 回答