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

标签 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 所以他们试图在它有效前 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(),这样我得到非常相似的堆栈跟踪(不一样,因为我使用了我自己的单元测试)。 但我认为他们没有做任何类似的事情......我还有什么其他想法可以实现这个错误吗?

最佳答案

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

这是一个非常奇怪的错误...我们不知道他们是如何抛出这个异常的。他们没有在较早的日期调用 checkValidity() ,仅使用系统提供的日期。我想这是其中一个神秘的 Java 错误 :) 到目前为止,还没有人提到另一个类似的错误,而且我们关闭这个问题已经一个月了。

无论如何,我只是想回答这个问题,这样它就不会显示为未回答。我希望这不是问题。

关于在新创建的 java.security.cert.X509Certificate 上抛出 java.security.cert.CertificateNotYetValidException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16418888/

相关文章:

java - java.security.cert.Certificate 中的验证方法是线程安全的吗?

java.lang.UnsupportedOperationException : Can't convert to color: type=0x1 异常

java - StringBuilder,消失的引号

java - 如何从 Java 应用程序获取远程 HTTPS 服务器支持的密码列表?

javascript - 不涉及服务器的 XSS - 这危险吗?

java - Spring Boot 测试不尊重 Web 安全配置

java - Java程序禁用SSL认证的安全风险

java - Android recyclerview 像画廊 View 吗?

java - 无法在 eclipse 4 中使用@Inject

java - 如何设置Excel中行的数据格式?