1

我找不到任何可以解决我确切情况的答案,如果这是重复的,我深表歉意。我正在尝试验证我们用来对我们的文件进行数字签名的证书,该证书在我们撤销证书之前工作正常。这听起来是正确的,我听到你说,但我的理解如下:

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

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

在这种情况下,我是否必须进行进一步测试才能查看吊销日期并覆盖结果并忽略它?我在做傻事吗?我对撤销有误解吗?

4

1 回答 1

0

据我了解,撤销检查是最新的,因为它们必须如此。

例如,假设如下:

  1. 2014年使用证书签署合法软件
  2. 证书过期或被吊销。
  3. 现在假设黑客拥有证书(撤销证书的主要原因)。
  4. 黑客使用受损证书签署恶意软件 - 他们可以使用任何他们想要的日期,因此选择与合法软件相同的日期。

现在您在 2015 年下载软件并想要检查它是否合法 - 如果您依赖于软件创建时的证书状态 1. 和 4. 似乎是合法的。如果您改为依赖当前状态,则 1. 和 4. 都显示为未签名,但合法软件可以使用新的有效证书重新签名,恶意软件不能。

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

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

我已经在单元测试中这样做了,因此不必仅为测试而创建新证书,但在生产中,您将来可能需要撤销证书,这可能会造成危险。

于 2014-11-18T12:58:30.483 回答