x509Chain吊销检查在撤销但有效的证书上失败

时间:2014-06-25 16:04:44

标签: c# x509certificate2 certificate-revocation

我无法找到解决我的确切情况的任何答案,如果这是重复的话,请道歉。我正在尝试验证我们用来对我们的文件进行数字签名的证书,这些证书工作正常,直到我们撤销证书。这听起来很正确我听到你说但我的理解如下:

如果使用有效期为2014年1月1日至2015年1月1日的证书在2014年2月1日对文件进行签名,然后在2014年3月1日撤销,则该文件上的证书为仍然有效,因为它在签署时没有被撤销。

如果这种理解是正确的,那么我希望x509Chain对象能够通过撤销检查,即使在上述文件的3/1/2014之后存在最新撤销列表的情况下进行了检查。不幸的是,结果是验证失败了,因为它认为证书已被撤销。

我是否必须进行进一步测试以查看撤销日期并覆盖结果并在此方案中忽略它?我做了些蠢事吗?我误解了撤销吗?

1 个答案:

答案 0 :(得分:0)

据我所知,撤销检查是最新的,因为它们必须是。

例如,假设如下:

  1. 证书用于在2014年签署合法软件
  2. 证书过期或被撤销。
  3. 现在假设黑客拥有证书(撤销证书的主要原因)。
  4. 黑客使用受到破坏的证书签署恶意软件 - 他们可以使用他们想要的任何日期,因此选择与合法软件相同的日期。
  5. 现在你在2015年下载软件并想要检查它是否合法 - 如果你依赖于软件创建时的证书状态,那么1.和4.似乎是合法的。如果您依赖当前状态,那么1.和4.都显示未签名,但合法软件可以使用新的有效证书重新签名,恶意软件不能。

    因此,默认情况下,如果公钥过期或被撤销,任何X509检查都将失败。

    但是,您可以选择不使用X509VerificationFlags检查到期或撤销。如果你这样做,那么X509Chain.Build将通过,但你需要以某种方式保持过期的密钥直接验证它们。

    我已经在单元测试中完成了这项工作,因此不必仅为测试创建新证书,但在生产中,您可能需要在将来撤销证书,从而使其具有潜在危险性。