Android https忽略證書信任問題, 以及性能問題

【第一部分税课,忽略證書信任問題】 直接去第二部分性能問題
搬運自:https://blog.csdn.net/lizeyang/article/details/18983843
java程序在訪問https資源時,出現(xiàn)報錯

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

1)https通信過程

(1)客戶使用https的URL訪問Web服務器立磁,要求與Web服務器建立SSL連接。

(2)Web服務器收到客戶端請求后剥槐,會將網(wǎng)站的證書信息(證書中包含公鑰)傳送一份給客戶端唱歧。

(3)客戶端的瀏覽器與Web服務器開始協(xié)商SSL連接的安全等級,也就是信息加密的等級粒竖。

(4)客戶端的瀏覽器根據(jù)雙方同意的安全等級颅崩,建立會話密鑰,然后利用網(wǎng)站的公鑰將會話密鑰加密蕊苗,并傳送給網(wǎng)站挨摸。

(5)Web服務器利用自己的私鑰解密出會話密鑰。

(6)Web服務器利用會話密鑰加密與客戶端之間的通信岁歉。

image

2)java程序的證書信任規(guī)則

如上文所述,客戶端會從服務端拿到證書信息膝蜈。調(diào)用端(客戶端)會有一個證書信任列表锅移,拿到證書信息后,會判斷該證書是否可信任饱搏。

如果是用瀏覽器訪問https資源非剃,發(fā)現(xiàn)證書不可信任,一般會彈框告訴用戶推沸,對方的證書不可信任备绽,是否繼續(xù)之類券坞。

Java虛擬機并不直接使用操作系統(tǒng)的keyring,而是有自己的security manager肺素。與操作系統(tǒng)類似恨锚,jdk的security manager默認有一堆的根證書信任。如果你的https站點證書是花錢申請的倍靡,被這些根證書所信任猴伶,那使用java來訪問此https站點會非常方便。因此塌西,如果用java訪問https資源他挎,發(fā)現(xiàn)證書不可信任,則會報文章開頭說到的錯誤捡需。

解決問題的方法

1)將證書導入到jdk的信任證書中(理論上應該可行办桨,未驗證)

2)在客戶端(調(diào)用端)添加邏輯,忽略證書信任問題

第一種方法站辉,需要在每臺運行該java程序的機器上呢撞,都做導入操作,不方便部署庵寞,因此狸相,采用第二種方法。下面貼下該方法對應的代碼捐川。

1)先實現(xiàn)驗證方法

void trustAllHttpsCertificates() throws Exception {
        TrustManager[] trustAllCerts = new TrustManager[1];
        trustAllCerts[0] = new MyTrustManager();
        SSLContext sslCtx = SSLContext.getInstance("SSL");
        sslCtx.init(null, trustAllCerts, null);
        javax.net.ssl.SSLSocketFactory sslsocketfactory = sslCtx.getSocketFactory();
        javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sslsocketfactory);
    }

class MyTrustManager implements TrustManager, X509TrustManager {
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public boolean isServerTrusted(X509Certificate[] certs) {
            return true;
        }

        public boolean isClientTrusted(X509Certificate[] certs) {
            return true;
        }

        public void checkServerTrusted(X509Certificate[] certs, String authType)
                throws CertificateException {
            return;
        }

        public void checkClientTrusted(X509Certificate[] certs, String authType)
                throws CertificateException {
            return;
        }
    }

2)在訪問https資源前脓鹃,調(diào)用

try {
            trustAllHttpsCertificates();
        } catch (Exception e) {
            e.printStackTrace();
        } //setDefaultSSLSocketFactory
        HostnameVerifier hv = (urlHostName, session) -> {
            Log.e("apibhuc", "Warning: URL Host: v7" + urlHostName + " vs. " + session.getPeerHost());
            return true;
        };
        HttpsURLConnection.setDefaultHostnameVerifier(hv);  // outer try catch

【第二部分,以上代碼性能問題】

如果你像上面說的每次請求都添加上面的代碼古沥,那么會有性能問題瘸右,具體就是訪問耗時,應將將上面部分代碼放至應用初始化時岩齿;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末太颤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子盹沈,更是在濱河造成了極大的恐慌龄章,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乞封,死亡現(xiàn)場離奇詭異做裙,居然都是意外死亡,警方通過查閱死者的電腦和手機肃晚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門锚贱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人关串,你說我怎么就攤上這事拧廊〖嗯牵” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵吧碾,是天一觀的道長凰盔。 經(jīng)常有香客問我,道長滤港,這世上最難降的妖魔是什么廊蜒? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮溅漾,結(jié)果婚禮上山叮,老公的妹妹穿的比我還像新娘。我一直安慰自己添履,他們只是感情好屁倔,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著暮胧,像睡著了一般锐借。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上往衷,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天钞翔,我揣著相機與錄音,去河邊找鬼席舍。 笑死布轿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的来颤。 我是一名探鬼主播汰扭,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼福铅!你這毒婦竟也來了萝毛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤滑黔,失蹤者是張志新(化名)和其女友劉穎笆包,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體略荡,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡庵佣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了撞芍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡跨扮,死狀恐怖序无,靈堂內(nèi)的尸體忽然破棺而出验毡,到底是詐尸還是另有隱情,我是刑警寧澤帝嗡,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布晶通,位于F島的核電站,受9級特大地震影響哟玷,放射性物質(zhì)發(fā)生泄漏狮辽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一巢寡、第九天 我趴在偏房一處隱蔽的房頂上張望喉脖。 院中可真熱鬧,春花似錦抑月、人聲如沸树叽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽题诵。三九已至,卻和暖如春层皱,著一層夾襖步出監(jiān)牢的瞬間性锭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工叫胖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留草冈,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓臭家,卻偏偏與公主長得像疲陕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子钉赁,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容