我有一个问题,我试图解决一整天,但我无法重建。我有一个引发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 所以他们试图在它之前验证它 0.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(),这样我得到了非常相似的堆栈跟踪(不一样,因为我使用了自己的单元测试)。但我认为他们没有做这样的事情......还有其他想法我可以如何实现这个错误吗?