1. 程式人生 > >Android下OkHttp請求自定義HTTPS證書介面設定

Android下OkHttp請求自定義HTTPS證書介面設定

在請求安全性高的介面時,我們可能會使用到HTTPS介面,HTTPS可以理解為HTTP+TLS,關於HTTPS具體是怎麼工作的,可以看這篇文章:http://gold.xitu.io/entry/56ef4ff47db2a20052218e0f
如果你的證書是向Android中內建預設信任的證書頒發機構申請的,則不需要通過此步驟(需要好多錢,但是大部分國內應用不會花那麼多錢去買權威機構頒發的證書),如果不是,此步驟是在你的App網路請求中加入信任自定義的證書(第三方非權威證書頒發機構頒發的證書),讓你的App信任此第三方非權威證書頒發機構。

try {
    //取得SSL的SSLContext例項,使用TLS協議
    SSLContext sslContext = SSLContext.getInstance
("TLS"); //取得KeyManagerFactory和TrustManagerFactory的X509金鑰管理器例項 KeyManagerFactory keyManager = KeyManagerFactory.getInstance("X509"); TrustManagerFactory trustManager = TrustManagerFactory.getInstance("X509"); //取得BKS密庫例項 KeyStore kks = KeyStore.getInstance("PKCS12"); //Android支援BKS的KeyStore KeyStore tks = KeyStore.getInstance
("BKS"); //加客戶端載證書和私鑰,通過讀取資原始檔的方式讀取金鑰和信任證書 //raw中為truststore.bks的信任密庫 tks.load(appCtx .getResources() .openRawResource(R.raw.truststore), CLIENT_TRUST_PASSWORD.toCharArray()); //raw資源中的檔案為client.p12格式的證書 kks.load(appCtx .getResources() .openRawResource
(R.raw.client), CLIENT_KET_PASSWORD.toCharArray()); //初始化金鑰管理器 keyManager.init(kks, CLIENT_KET_PASSWORD.toCharArray()); trustManager.init(tks); //初始化SSLContext sslContext.init(keyManager.getKeyManagers(), trustManager.getTrustManagers(), null); mOkHttpClient = OkHttpUtils.getInstance().getOkHttpClient(); mOkHttpClient.setSslSocketFactory(sslContext.getSocketFactory()); } catch (Exception e) { Log.e(TAG, "init https proxy failed!"); throw new RuntimeException("init https proxy failed!"); }