我遇到了一个奇怪的问题(没有采取任何行动就解决了:-))并且只是想知道是否有人知道它是如何发生的。
背景
所以我的测试服务器有一个逻辑,它使用REST URL连接到支付网关(第三方),以获取它支持的银行列表。由于它的背景连接&常量服务URL,我已经为我的http客户端使用了虚拟信任库(类似于this)。我的应用程序在具有UTC时区的服务器上运行。
问题:
这就是从2016年10月31日EOD到2016年11月1日开始的方式EOD - 曾经访问过https REST URL它引发了“javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
”异常。 java版本是open-jdk-1.7.0.09&我尝试使用相同配置的不同服务器,情况相同。当我在一台服务器上将java更新为1.7.0.101时,它开始工作了。我今天把问题留给了cehck&在Nov 2, 2016
上只需重启jvm一切正常。证书验证/连接没有问题。我发现一个奇怪的事实是java默认时区从America/Los Angeles
更改为UTC
。夏令时也设置为真(10月结束)。
问题:
时区与SSL握手是否有任何关联?我没有看到环境/代码有任何其他变化。有人知道这个吗? 我希望这不违反问题标准: - )
答案 0 :(得分:3)
在正确编写的TLS堆栈中,当前时区无关紧要。证书的到期时间以UTC格式存储,因此与时区无关。因此,比较的时间也应该是UTC。在适当的操作系统上,本地时间也在内部存储在UTC中,尽管Windows可能是例外。因此,如果所有使用UTC,时区的更改将没有问题。当然,有些人可能会根据时区使用功能来搞砸这个好理论。