我有这个可执行文件,用 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 扩展。
所以我的问题/问题包括:
- RFC 3161 是否也仅适用于代码签名证书或 TSA?
- 如果是,如果在撤销前以原因 5 CessationOfOperation 进行签名,签名是否仍然有效?
- 如果是,如果证书在过期后被发现受损,是否可以/是否应该使用不同的原因再次吊销证书?仍然可能有数百个有效签名!