为什么我的可执行文件上的签名仍然有效?

问题描述 投票:0回答:2

我有这个可执行文件,用 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"
/>

为此,我们运行一个公司根 CA、每个公司分支机构的中间 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 项目符号 1:

当不再使用 TSA,但 TSA 私钥尚未使用时 被泄露,权威机构的证书将被撤销。什么时候 与撤销的证书相关的 ReasonCode 扩展 TSA 存在于 CRL 条目扩展中,它应设置为 未指定 (0)、隶属关系已更改 (3)、已取代 (4) 或 停止操作 (5)。在这种情况下,在未来的任何时间, 使用相应密钥签名的令牌将被视为 无效,但撤销时间之前生成的token将保留 有效的。当reasonCode扩展相对于撤销时 CRL 条目扩展中不存在 TSA 的证书, 然后所有已经用相应密钥签名的令牌 应被视为无效。因此,建议 使用 ReasonCode 扩展。

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

  1. RFC 3161 是否也仅适用于代码签名证书或 TSA?
  2. 如果是,在有理由撤销之前签名是否仍然有效
    cessationOfOperation (5)
  3. 如果是,如果在证书过期后发现证书受到损害,是否可以/应该使用不同的原因再次撤销证书?仍然可能有数百个有效签名!
visual-studio validation certificate authenticode trusted-timestamp
2个回答
3
投票
  1. 不,指定的 RFC 描述了时间戳协议和时间戳权威。它与协同设计证书无关
  2. 是的,在撤销之前做出的签名被视为有效
  3. 一个证书不能多次撤销。如果被撤销那就被撤销了。

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

我假设您的证书是协同设计证书。您的应用程序仍然有效的原因是您在签署应用程序时使用了时间戳。时间戳保证您的签名是在指定时间进行的。而此时你的证书就有效了。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.