java.security.cert.CertificateNotYetValidException 即使在 "valid from" 日期之后
java.security.cert.CertificateNotYetValidException even after the "valid from" Date
当我尝试连接到 URL 时,我得到以下日志跟踪
2017-03-18 00:11:54.519 错误:javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateNotYetValidException:NotBefore:2017 年 3 月 14 日星期二 13:53:28PDT
服务器的证书从2017年3月14日开始生效,我在2017年3月18日尝试连接,为什么会出现这个错误?此异常还有其他原因吗?
大多数类似问题的答案都建议检查系统时间,但在这种情况下,记录器会添加系统时间,所以情况并非如此。
出现此问题的原因是在我们的代码中创建的自定义信任管理器在创建时将验证日期作为输入,并且当日期值不为空时,它将该日期作为当前日期并根据该日期验证证书.
因此,当使用旧日期创建信任管理器时,它会导致 java.security.cert.CertificateNotYetValidException 对于有效起始日期在配置日期之后的证书。
在我的例子中,模拟器日期不正确,它被设置为比实际日期早 8 天。
编辑:
作为提示,我建议为模拟器使用冷启动。因为日期和时间只会在冷启动时更新,而不会在快速启动时更新。
当我尝试连接到 URL 时,我得到以下日志跟踪
2017-03-18 00:11:54.519 错误:javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateNotYetValidException:NotBefore:2017 年 3 月 14 日星期二 13:53:28PDT
服务器的证书从2017年3月14日开始生效,我在2017年3月18日尝试连接,为什么会出现这个错误?此异常还有其他原因吗?
大多数类似问题的答案都建议检查系统时间,但在这种情况下,记录器会添加系统时间,所以情况并非如此。
出现此问题的原因是在我们的代码中创建的自定义信任管理器在创建时将验证日期作为输入,并且当日期值不为空时,它将该日期作为当前日期并根据该日期验证证书.
因此,当使用旧日期创建信任管理器时,它会导致 java.security.cert.CertificateNotYetValidException 对于有效起始日期在配置日期之后的证书。
在我的例子中,模拟器日期不正确,它被设置为比实际日期早 8 天。
编辑: 作为提示,我建议为模拟器使用冷启动。因为日期和时间只会在冷启动时更新,而不会在快速启动时更新。