为什么我的可执行文件上的签名仍然有效?
Why is the signature on my executable still valid?
我有这个可执行文件,用 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 应用程序拦截器。一切都很好。
现在,我被告知我的证书已被吊销,我可以通过查看 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 中提供的 Reason 导致了这个。根据 RFC 3161,§4 项目符号 1:
When a TSA shall not be used anymore, but the TSA private key has not
been compromised, the authority's certificate SHALL be revoked. When
the reasonCode extension relative to the revoked certificate from the
TSA is present in the CRL entry extensions, it SHALL be set either to
unspecified (0), affiliationChanged (3), superseded (4) or
cessationOfOperation (5). In that case, at any future time, the
tokens signed with the corresponding key will be considered as
invalid, but tokens generated before the revocation time will remain
valid. When the reasonCode extension relative to the revoked
certificate from the TSA is not present in the CRL entry extensions,
then all the tokens that have been signed with the corresponding key
SHALL be considered as invalid. For that reason, it is recommended to
use the reasonCode extension.
所以我的问题/问题包括:
- RFC 3161 是否也仅适用于代码签名证书或 TSA?
- 如果是,如果在撤销之前以原因 5 CessationOfOperation 签名是否仍然有效?
- 如果是,如果证书在过期后被发现遭到破坏,是否可以/应该使用不同的原因再次吊销证书?仍然可能有数百个有效签名!
- 否,指定的 RFC 描述了时间戳协议和时间戳授权机构。它与代码签名证书无关
- 是的,在撤销之前做出的签名被认为是有效的
- 一个证书不能被吊销多次。如果它被撤销,那么它就被撤销。
Now, I am told my certificate is revoked wich I can verify by looking at the crl
我假设你的证书是一个代码签名证书。您的应用程序仍在运行的原因是您在签署应用程序时使用了时间戳。时间戳保证您的签名是在指定时间完成的。而此时你的证书是有效的。
上次查看时,我记得是这样的:启动可执行文件时,无法尝试网络连接来验证用于签名的证书是否仍然有效。此外,要使签名有效,证书必须在签名时 有效 - 引用的 RFC 同意这一点。除了从有效根 CA 证书列表中删除根 CA 之外,无法追溯撤销此类签名。如果您只是删除或撤销链上的某些内容,捆绑在可执行文件中的链仍将向下链接到根并因此得到验证。
我有这个可执行文件,用 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 应用程序拦截器。一切都很好。
现在,我被告知我的证书已被吊销,我可以通过查看 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 中提供的 Reason 导致了这个。根据 RFC 3161,§4 项目符号 1:
When a TSA shall not be used anymore, but the TSA private key has not been compromised, the authority's certificate SHALL be revoked. When the reasonCode extension relative to the revoked certificate from the TSA is present in the CRL entry extensions, it SHALL be set either to unspecified (0), affiliationChanged (3), superseded (4) or cessationOfOperation (5). In that case, at any future time, the tokens signed with the corresponding key will be considered as invalid, but tokens generated before the revocation time will remain valid. When the reasonCode extension relative to the revoked certificate from the TSA is not present in the CRL entry extensions, then all the tokens that have been signed with the corresponding key SHALL be considered as invalid. For that reason, it is recommended to use the reasonCode extension.
所以我的问题/问题包括:
- RFC 3161 是否也仅适用于代码签名证书或 TSA?
- 如果是,如果在撤销之前以原因 5 CessationOfOperation 签名是否仍然有效?
- 如果是,如果证书在过期后被发现遭到破坏,是否可以/应该使用不同的原因再次吊销证书?仍然可能有数百个有效签名!
- 否,指定的 RFC 描述了时间戳协议和时间戳授权机构。它与代码签名证书无关
- 是的,在撤销之前做出的签名被认为是有效的
- 一个证书不能被吊销多次。如果它被撤销,那么它就被撤销。
Now, I am told my certificate is revoked wich I can verify by looking at the crl
我假设你的证书是一个代码签名证书。您的应用程序仍在运行的原因是您在签署应用程序时使用了时间戳。时间戳保证您的签名是在指定时间完成的。而此时你的证书是有效的。
上次查看时,我记得是这样的:启动可执行文件时,无法尝试网络连接来验证用于签名的证书是否仍然有效。此外,要使签名有效,证书必须在签名时 有效 - 引用的 RFC 同意这一点。除了从有效根 CA 证书列表中删除根 CA 之外,无法追溯撤销此类签名。如果您只是删除或撤销链上的某些内容,捆绑在可执行文件中的链仍将向下链接到根并因此得到验证。