我有这个可执行文件,用vb.Net编写并编译为.Net Framework 2.0的Windows可执行文件。由于我们使用软件白名单来阻止Windows客户端上的未知软件,因此使用Visual Studio 2008 Professional workflow对此可执行文件进行了强名称和签名:
<SignFile
CertificateThumbprint="1f 6c ... 33 b2"
SigningTarget="$(TargetPath)"
TimestampUrl="http://timestamp.verisign.com/scripts/timstamp.dll"
ContinueOnError="false"
/>
为此,我们运行企业RootCA,每个公司分支机构的中间CA,以及每个分支机构CA的下方。 “我的”发行CA向我提供了一份代码签名证书,几个月前就已过期了。
因为我在工作流程中使用了Trusted Timestamp(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中提供的原因会导致这种情况。根据{{3}},§4子弹1:
当TSA不再使用时,但TSA私钥没有 受到损害后,该机构的证书将被撤销。什么时候 reasonCode扩展相对于撤销证书的 TSA存在于CRL条目扩展中,它应设置为 未指定(0),affiliationChanged(3),取代(4)或 cessationOfOperation(5)。在那种情况下,在任何未来的时间, 使用相应密钥签名的令牌将被视为 无效,但在撤销时间之前生成的令牌将保留 有效。当reasonCode扩展相对于被撤销时 来自TSA的证书不存在于CRL条目扩展中, 然后用相应的密钥签名的所有令牌 应视为无效。因此,建议使用 使用reasonCode扩展名。
所以我的问题/问题包括:
答案 0 :(得分:2)
现在,我被告知我的证书已被撤销,我可以通过查看crl
进行验证
我认为您的证书是代码签名证书。您的应用程序仍在工作的原因是您在签署应用程序时使用了时间戳。时间戳保证您的签名是在指定时间进行的。此时您的证书有效。
答案 1 :(得分:0)
上次我调查它时,我记得如下:当启动可执行文件时,不能尝试网络连接来验证用于签名的证书是否仍然有效。此外,要使签名有效,证书在签名时必须是有效的 - 引用的RFC与此一致。除了从有效根CA证书列表中删除根CA之外,无法追溯撤销此类签名。如果您只是删除或撤销链中的某些内容,则可执行文件中捆绑的链仍将链接到根,从而进行验证。