在新创建的java.security.cert.X509Certificate上抛出java.security.cert.CertificateNotYetValidException

时间:2013-05-07 12:19:00

标签: java security

我有一个问题,我试图整天解决,但我无法重建。我有一个引发CertificateNotYetValidException例外的问题:

java.security.cert.CertificateNotYetValidException: certificate not valid till 20130502110036GMT+00:00

因此,它在2013 05 02 11:00.3600之前无效 但他们试图验证它,下一个日志的时间戳是: 2013-05-02 11:00:34,759 所以他们试图在它有效之前验证它.013秒,但这怎么可能呢?我已经编写了一个单元测试,它完成了数千次创建身份验证(具有证书)并立即写入当前日期,它总是向下舍入到百分之一秒,所以我无法重现错误。

证书由bouncycastle证书生成器生成。

以下是我的jUnit测试中的示例:

 xa = (Authentication) a;
log.info("----current date: " + sdf.format(new Date()));
log.info("not valid before: " + sdf.format(xa.getCertificate().getNotBefore()));

示例输出:

  INFO  [] ----current date: 2013-05-07 12:03:13.116
  INFO  [] not valid before: 2013-05-07 12:03:12.000

So, if i could of reproduced the issue, i would get something like this:

  INFO  [] ----current date: 2013-05-07 12:03:13.116
  INFO  [] not valid before: 2013-05-07 12:03:14.000

We use java.security.cert.X509Certificate

我找到了重现问题的方法,但这是非常牵强的,我真的希望他们在测试中没有这样做:

xa.getCertificate().checkValidity(new Date(new Date().getTime()-10000));

基本上我在早期的日期调用了checkValidity(),这样我就得到了非常相似的堆栈跟踪(不一样,因为我使用了自己的单元测试)。 但我认为他们没有做这样的事情......还有其他想法我怎么能实现这个错误?

1 个答案:

答案 0 :(得分:0)

正如我所说,它已被关闭为“不可复制”。

这是一个非常奇怪的错误......我们不知道他们是如何抛出这个异常的。他们没有在早期日期调用checkValidity(),只使用系统提供的日期。我猜这是神秘的Java错误之一:)到目前为止还没有提到像这样的另一个错误,而且自从我们关闭这个问题已经过了一个月。

无论如何,我只是想回答这个问题,所以它没有显示为没有答案。我希望这不是问题。