我有这个可执行文件,用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给我提供了一个Codesigning Certificate,这个证书几个月前过期了。
因为我在我的工作流程中使用了一个可信的时间戳(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私钥没有使用时被泄露的,当局的证书将被撤销。当中相对于已撤销证书的reasonCode扩展名TSA存在于CRL条目扩展中,它应设置为未指定(0),从属关系更改(3),取代(4)或在这种情况下,在未来的任何时间使用相应密钥签名的令牌将被视为无效,但在撤销时间之前生成的令牌将保留有效的。当reasonCode扩展相对于被撤销时来自TSA的证书不存在于CRL条目扩展中,然后是用相应密钥签名的所有令牌应被视为无效。因此,建议使用reasonCode扩展名
所以我的问题/问题包括:
- RFC 3161是否也只适用于协同设计证书或TSAs ?
- 如果是,在以原因5 (CessationOfOperation)撤销之前签名是否仍然有效?
- 如果是,如果证书过期后发现被破坏,可以/应该使用不同的原因再次撤销证书吗?仍然可能有数百个有效签名!
- 不,指定的RFC描述时间戳协议和时间戳授权。它与协同设计证书无关
- 是的,在撤销时间之前签名被认为是有效的
- 证书不能被多次吊销。如果撤销了,那就撤销吧。
现在,我被告知我的证书被吊销了,我可以通过查看crl
来验证
我假设你的证书是一个协同设计证书。您的应用程序仍在工作的原因是在对应用程序签名时使用了时间戳。时间戳保证你的签名是在指定的时间进行的。此时您的证书是有效的
上次查看它时,我记得是这样的:当启动可执行文件时,不能尝试任何网络连接来验证用于签名的证书是否仍然有效。此外,为了使签名有效,在签名时证书必须是有效的——引用的RFC同意这一点。除了从有效的根CA证书列表中删除根CA之外,没有任何方法可以追溯地撤销此类签名。如果您只是删除或撤销链上的某些内容,那么在可执行文件中捆绑的链仍然会向下链到根,从而验证。