前言
使用 RxJava,OkHttp鞠抑,Retrofit 進行網(wǎng)絡(luò)請求,在測試環(huán)境下忌警,網(wǎng)絡(luò)請求一切正常搁拙。修改為正式服務(wù)器地址:https://xxx.cn,結(jié)果運行項目發(fā)現(xiàn)了以下異常
D/OkHttp: <-- HTTP FAILED: javax.net.ssl.SSLHandshakeException: Chain validation failed
com.bfmd.okhttpsample I/Main: error: Chain validation failed
這代碼在測試環(huán)境下運行沒問題法绵,切換到正式服務(wù)器就不能訪問了箕速。WTF 脫口而出,這肯定不是代碼的問題礼烈,是不是后臺證書配置的問題盎÷(日常甩鍋)。
探索
作為一名合格的面向百度編程工程師此熬,我熟練的打開了搜索引擎,找到了鴻洋大佬的 Android Https相關(guān)完全解析 當(dāng)OkHttp遇到Https 博客。發(fā)現(xiàn)了以下內(nèi)容
OkHttp 默認是支持 Https 協(xié)議的網(wǎng)站犀忱,但前提條件是:支持 Https 的網(wǎng)站證書都是由 CA 機構(gòu)版本的證書募谎。
之后,和后臺溝通證書認證的問題阴汇,后臺說證書沒有問題数冬,是通過 CA 認證頒布的,并且我在瀏覽器中訪問正式服務(wù)器地址:
顯示的也是帶鎖標(biāo)志的安全網(wǎng)站搀庶,也間接的表明了證書沒問題拐纱。
難道是代碼寫的有問題? 我檢查了一邊代碼后,確定代碼沒問題哥倔。我又陷入了沉思中秸架,這到底是哪里出問題了,百度一番無果后咆蒿,我打開 Google东抹,找到了一條關(guān)于 OkHttp 的 issue,磕磕絆絆看完以后沃测,得出的結(jié)論是和 OkHttp 無關(guān)缭黔。難道這 Bug 就無法解決了嗎?我第二次又重新打開這個 issue蒂破,發(fā)現(xiàn)了以下內(nèi)容
我恍然大悟馏谨,立即看了下測試平板的系統(tǒng)時間,mmp 的竟然是 2012 年附迷。我將時間修改為當(dāng)前時間田巴,重新運行項目,可以正常的進行網(wǎng)絡(luò)請求挟秤。內(nèi)心是奔潰的壹哺,怎么可以這么糟心。艘刚。管宵。
困惑
到寫下這篇博客,我還是沒能搞明白攀甚,為什么修改系統(tǒng)的時間會導(dǎo)致 Chain validation failed 異常箩朴。我抱著好奇的心態(tài),把系統(tǒng)時間更改為 2018 年 8月份秋度,測試了下 微信炸庞,支付寶,網(wǎng)頁云音樂荚斯。打開 App 后埠居,發(fā)現(xiàn)大廠的 App查牌,會彈出 Toast 提示 已自動校準(zhǔn)時間,此時系統(tǒng)設(shè)置中的時間已經(jīng)更改為當(dāng)前時間滥壕。如果有知道具體原因的大佬纸颜,懇請告知。