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

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

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

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

一、https證書

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

證書分兩種:

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

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

二、如何忽略證書

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

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

2、新建一個類

public class SSLSocketClient {  
  //獲取這個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; 
  } 
} 

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

但是有一點需要注意:


然后我們在okhttp中設置SSLSocketFactory,如圖:


運行之后,發(fā)現(xiàn)還是會報錯,如圖:


意思是我們的請求證書和服務器的證書不一致,這是因為我們還需要配置一個HostnameVerifier來忽略host驗證

三、在SSLSocketClient的類中再加入一個方法:

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

然后再okhttp中配置一下HostnameVerifier:


在運行,可以正常訪問了

四、整體配置

copy整個工具類到你的項目中:

/** 
 * Created by Anonymous on 2017/6/13. 
 */ 
 
public class SSLSocketClient { 
 
  //獲取這個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)絡了,本人android小白,說的不對了,希望大神能指出,也希望大家多多支持腳本之家。

相關文章

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

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

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

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

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

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

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

    android12?SD如何動態(tài)申請讀寫權限

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

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

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

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

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

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

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

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

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

    android使用OPENGL ES繪制圓柱體

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

    Android實現(xiàn)界面跳轉功能

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

最新評論

巴楚县| 常熟市| 贡山| 曲麻莱县| 隆子县| 瑞昌市| 吉安县| 阿城市| 冀州市| 旬阳县| 盐池县| 桂林市| 泸西县| 潜江市| 永和县| 叙永县| 洮南市| 名山县| 桦甸市| 皋兰县| 河池市| 隆回县| 澳门| 建水县| 封丘县| 沿河| 杂多县| 都匀市| 宁武县| 宜丰县| 鲁甸县| 乐亭县| 青川县| 托克逊县| 呈贡县| 彭水| 大埔县| 桦南县| 安陆市| 连南| 邹城市|