最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android okhttp3.0忽略https證書的方法

 更新時(shí)間:2017年12月18日 16:52:32   作者:Anonymous-OS  
這篇文章主要介紹了 Android okhttp3.0忽略https證書的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

最近公司項(xiàng)目需要,網(wǎng)絡(luò)協(xié)議支持https,之前接觸不多,所以這次想總結(jié)一下https在android開發(fā)中的相關(guān)內(nèi)容

一、https證書

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

證書分兩種:

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

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

二、如何忽略證書

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

意思就是沒有找到本地證書,那就開始構(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)需要注意:


然后我們?cè)趏khttp中設(shè)置SSLSocketFactory,如圖:


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


意思是我們的請(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:


在運(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); 

這樣你就可以忽略https證書正常訪問你的網(wǎng)絡(luò)了,本人android小白,說的不對(duì)了,希望大神能指出,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android常用定時(shí)器的實(shí)現(xiàn)方式

    Android常用定時(shí)器的實(shí)現(xiàn)方式

    我們?cè)陂_發(fā)中時(shí)常需要寫一些定時(shí)的任務(wù),比如每5秒執(zhí)行一次,下面這篇文章主要給大家介紹了關(guān)于Android常用定時(shí)器的實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Android獲取監(jiān)聽SD卡狀態(tài)

    Android獲取監(jiān)聽SD卡狀態(tài)

    本篇文章主要介紹了Android獲取監(jiān)聽SD卡狀態(tài),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • 使用科大訊飛語音SDK實(shí)現(xiàn)文字在線合成語音

    使用科大訊飛語音SDK實(shí)現(xiàn)文字在線合成語音

    這篇文章主要介紹了使用科大訊飛語音SDK實(shí)現(xiàn)文字在線合成語音 的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • android12?SD如何動(dòng)態(tài)申請(qǐng)讀寫權(quán)限

    android12?SD如何動(dòng)態(tài)申請(qǐng)讀寫權(quán)限

    這篇文章主要給大家介紹了關(guān)于android12?SD如何動(dòng)態(tài)申請(qǐng)讀寫權(quán)限的相關(guān)資料,從Android?6.0開始,權(quán)限不再是在manifest?件中粘貼?下即可,這時(shí)候權(quán)限也正式?進(jìn)?家的視野,需要的朋友可以參考下
    2023-07-07
  • Android 線程thread的兩種實(shí)現(xiàn)方法(必看)

    Android 線程thread的兩種實(shí)現(xiàn)方法(必看)

    下面小編就為大家?guī)硪黄狝ndroid 線程thread的兩種實(shí)現(xiàn)方法(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Android應(yīng)用中使用及實(shí)現(xiàn)系統(tǒng)“分享”接口實(shí)例

    Android應(yīng)用中使用及實(shí)現(xiàn)系統(tǒng)“分享”接口實(shí)例

    為了應(yīng)用的推廣、傳播,很多的應(yīng)用中都有“分享”功能,這篇文章主要介紹了Android應(yīng)用中使用及實(shí)現(xiàn)系統(tǒng)“分享”接口實(shí)例,有興趣的可以了解一下。
    2016-12-12
  • Android開發(fā)優(yōu)化之Apk瘦身優(yōu)化指南

    Android開發(fā)優(yōu)化之Apk瘦身優(yōu)化指南

    隨著業(yè)務(wù)快速發(fā)展,各種業(yè)務(wù)功能上線,版本不斷迭代,apk體積也越來越大,下面這篇文章主要給大家介紹了關(guān)于Android開發(fā)優(yōu)化之Apk瘦身優(yōu)化的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Android Studio 實(shí)現(xiàn)九宮格功能

    Android Studio 實(shí)現(xiàn)九宮格功能

    這篇文章主要介紹了Android Studio 實(shí)現(xiàn)九宮格,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • android使用OPENGL ES繪制圓柱體

    android使用OPENGL ES繪制圓柱體

    這篇文章主要為大家詳細(xì)介紹了android使用OPENGL ES繪制圓柱體 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Android實(shí)現(xiàn)界面跳轉(zhuǎn)功能

    Android實(shí)現(xiàn)界面跳轉(zhuǎn)功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)界面跳轉(zhuǎn)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09

最新評(píng)論

德钦县| 大关县| 郁南县| 龙南县| 门头沟区| 汤原县| 宁海县| 金山区| 托克托县| 丹东市| 石景山区| 吴忠市| 怀仁县| 平凉市| 静海县| 临沧市| 宁南县| 武宁县| 上犹县| 浑源县| 曲松县| 资兴市| 白山市| 宁南县| 安图县| 沾益县| 安阳县| 鄂托克前旗| 宜春市| 青海省| 繁昌县| 遵义市| 阜新市| 高青县| 绿春县| 榆树市| 南澳县| 香港| 宝应县| 兰溪市| 莱芜市|