欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Android中okhttp3.0如何忽略https證書

這篇文章主要介紹了Android中okhttp3.0如何忽略https證書,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

成都服務(wù)器托管,創(chuàng)新互聯(lián)公司提供包括服務(wù)器租用、服務(wù)器托管、帶寬租用、云主機(jī)、機(jī)柜租用、主機(jī)租用托管、CDN網(wǎng)站加速、域名與空間等業(yè)務(wù)的一體化完整服務(wù)。電話咨詢:028-86922220

一、https證書

對(duì)于https和證書的概念,大家可以自行搜索百度。

證書分兩種:

1、花錢向認(rèn)證機(jī)構(gòu)購買的證書,(我們公司買的證書一個(gè)就需要4000元,TMD,還不如多租一臺(tái)服務(wù)器)。服務(wù)器如果使用了此類證書的話,那對(duì)于移動(dòng)端來說,直接可以忽略此證書,直接用https訪問。與之不同的是ios內(nèi)置了很多信任的證書,所以他們不需要做任何操作

2、另一種是自己制作的證書,使用此類證書的話是不受信任的,也不需要花錢,所以需要我們在代碼中將此類證書設(shè)置為信任證書

二、如何忽略證書

1、服務(wù)器的哥們?nèi)绻由狭俗C書的話,那么你們的網(wǎng)絡(luò)請(qǐng)求的url將從http:xx改成https:xx,如果你直接也將http改成https的話而什么也不做的話,客戶端將直接報(bào)錯(cuò),如圖:

Android中okhttp3.0如何忽略https證書

意思就是沒有找到本地證書,那就開始構(gòu)建一個(gè)SSL來信任所有的證書,忽略證書其實(shí)就是如此。

2、新建一個(gè)類

public class SSLSocketClient {  
  //獲取這個(gè)SSLSocketFactory 
  public static SSLSocketFactory getSSLSocketFactory() { 
    try { 
      SSLContext sslContext = SSLContext.getInstance("SSL"); 
      sslContext.init(null, getTrustManager(), new SecureRandom()); 
      return sslContext.getSocketFactory(); 
    } catch (Exception e) { 
      throw new RuntimeException(e); 
    } 
  }  
  //獲取TrustManager 
  private static TrustManager[] getTrustManager() { 
    TrustManager[] trustAllCerts = new TrustManager[]{ 
        new X509TrustManager() { 
          @Override 
          public void checkClientTrusted(X509Certificate[] chain, String authType) { 
          } 
 
          @Override 
          public void checkServerTrusted(X509Certificate[] chain, String authType) { 
          } 
 
          @Override 
          public X509Certificate[] getAcceptedIssuers() { 
            return new X509Certificate[]{}; 
          } 
        } 
    }; 
    return trustAllCerts; 
  } 
}

通過這個(gè)類我們可以獲得SSLSocketFactory,這個(gè)東西就是用來管理證書和信任證書的

但是有一點(diǎn)需要注意:

Android中okhttp3.0如何忽略https證書

然后我們在okhttp中設(shè)置SSLSocketFactory,如圖:

Android中okhttp3.0如何忽略https證書

運(yùn)行之后,發(fā)現(xiàn)還是會(huì)報(bào)錯(cuò),如圖:

Android中okhttp3.0如何忽略https證書

意思是我們的請(qǐng)求證書和服務(wù)器的證書不一致,這是因?yàn)槲覀冞€需要配置一個(gè)HostnameVerifier來忽略host驗(yàn)證

三、在SSLSocketClient的類中再加入一個(gè)方法:

//獲取HostnameVerifier 
  public static HostnameVerifier getHostnameVerifier() { 
    HostnameVerifier hostnameVerifier = new HostnameVerifier() { 
      @Override 
      public boolean verify(String s, SSLSession sslSession) { 
        return true; 
      } 
    }; 
    return hostnameVerifier; 
  }

然后再okhttp中配置一下HostnameVerifier:

Android中okhttp3.0如何忽略https證書

在運(yùn)行,可以正常訪問了

四、整體配置

copy整個(gè)工具類到你的項(xiàng)目中:

/** 
 * Created by Anonymous on 2017/6/13. 
 */ 
 
public class SSLSocketClient { 
 
  //獲取這個(gè)SSLSocketFactory 
  public static SSLSocketFactory getSSLSocketFactory() { 
    try { 
      SSLContext sslContext = SSLContext.getInstance("SSL"); 
      sslContext.init(null, getTrustManager(), new SecureRandom()); 
      return sslContext.getSocketFactory(); 
    } catch (Exception e) { 
      throw new RuntimeException(e); 
    } 
  } 
 
  //獲取TrustManager 
  private static TrustManager[] getTrustManager() { 
    TrustManager[] trustAllCerts = new TrustManager[]{ 
        new X509TrustManager() { 
          @Override 
          public void checkClientTrusted(X509Certificate[] chain, String authType) { 
          } 
 
          @Override 
          public void checkServerTrusted(X509Certificate[] chain, String authType) { 
          } 
 
          @Override 
          public X509Certificate[] getAcceptedIssuers() { 
            return new X509Certificate[]{}; 
          } 
        } 
    }; 
    return trustAllCerts; 
  } 
 
  //獲取HostnameVerifier 
  public static HostnameVerifier getHostnameVerifier() { 
    HostnameVerifier hostnameVerifier = new HostnameVerifier() { 
      @Override 
      public boolean verify(String s, SSLSession sslSession) { 
        return true; 
      } 
    }; 
    return hostnameVerifier; 
  } 
}

然后再okhttp中配置

mHttpClient = new OkHttpClient().newBuilder() 
          .connectTimeout(15, TimeUnit.SECONDS) 
          .readTimeout(15, TimeUnit.SECONDS) 
          .writeTimeout(15, TimeUnit.SECONDS) 
          .addInterceptor(new LogInterceptor()) 
          .addInterceptor(new TokenInterceptor()) 
          .sslSocketFactory(SSLSocketClient.getSSLSocketFactory())//配置 
          .hostnameVerifier(SSLSocketClient.getHostnameVerifier())//配置 
          .build();

如果你用的是retrofit,在retrofit中配置一下okhttp即可

retrofitAPI = new Retrofit.Builder() 
          .baseUrl(AppConfig.baseUrl) 
          .addConverterFactory(GsonConverterFactory.create()) 
          .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
          .client(mHttpClient)//配置okhttp 
          .build() 
          .create(RetrofitAPI.class);

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Android中okhttp3.0如何忽略https證書”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

網(wǎng)頁名稱:Android中okhttp3.0如何忽略https證書
文章來源:http://chinadenli.net/article4/gjesoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、網(wǎng)站排名App開發(fā)、小程序開發(fā)、靜態(tài)網(wǎng)站、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)