Https 请求之 Chain validation failed 异常

前言

使用 RxJava,OkHttp,Retrofit 进行网络请求,在测试环境下,网络请求一切正常。修改为正式服务器地址:https://xxx.cn,结果运行项目发现了以下异常

D/OkHttp: <-- HTTP FAILED: javax.net.ssl.SSLHandshakeException: Chain validation failed
com.bfmd.okhttpsample I/Main: error: Chain validation failed
Https 请求之 Chain validation failed 异常_第1张图片
image.png

这代码在测试环境下运行没问题,切换到正式服务器就不能访问了。WTF 脱口而出,这肯定不是代码的问题,是不是后台证书配置的问题啊(日常甩锅)。

探索

作为一名合格的面向百度编程工程师,我熟练的打开了搜索引擎,找到了鸿洋大佬的 Android Https相关完全解析 当OkHttp遇到Https 博客。发现了以下内容

OkHttp 默认是支持 Https 协议的网站,但前提条件是:支持 Https 的网站证书都是由 CA 机构版本的证书。

之后,和后台沟通证书认证的问题,后台说证书没有问题,是通过 CA 认证颁布的,并且我在浏览器中访问正式服务器地址:

Https 请求之 Chain validation failed 异常_第2张图片
访问正式服务器地址

显示的也是带锁标志的安全网站,也间接的表明了证书没问题。

难道是代码写的有问题? 我检查了一边代码后,确定代码没问题。我又陷入了沉思中,这到底是哪里出问题了,百度一番无果后,我打开 Google,找到了一条关于 OkHttp 的 issue,磕磕绊绊看完以后,得出的结论是和 OkHttp 无关。难道这 Bug 就无法解决了吗?我第二次又重新打开这个 issue,发现了以下内容

Https 请求之 Chain validation failed 异常_第3张图片

我恍然大悟,立即看了下测试平板的系统时间,mmp 的竟然是 2012 年。我将时间修改为当前时间,重新运行项目,可以正常的进行网络请求。内心是奔溃的,怎么可以这么糟心。。。

困惑

到写下这篇博客,我还是没能搞明白,为什么修改系统的时间会导致 Chain validation failed 异常。我抱着好奇的心态,把系统时间更改为 2018 年 8月份,测试了下 微信,支付宝,网页云音乐。打开 App 后,发现大厂的 App,会弹出 Toast 提示 已自动校准时间,此时系统设置中的时间已经更改为当前时间。如果有知道具体原因的大佬,恳请告知。

你可能感兴趣的:(Https 请求之 Chain validation failed 异常)