Retrofit+OKHttp忽略https證書驗證

記錄這個的緣由,是由於不少時候,由於後臺配置的證書不正確致使APP訪問不到服務器數據,致使影響自身的開發進度。沒幾行代碼,邏輯也清晰,因此下面就直接貼出工具類吧:java

 1 package huolongluo.yeshen.byw.injection.model;
 2 
 3 import java.security.SecureRandom;
 4 import java.security.cert.X509Certificate;
 5 
 6 import javax.net.ssl.HostnameVerifier;
 7 import javax.net.ssl.SSLContext;
 8 import javax.net.ssl.SSLSession;
 9 import javax.net.ssl.SSLSocketFactory;
10 import javax.net.ssl.TrustManager;
11 import javax.net.ssl.X509TrustManager;
12 
13 /**
14  * Created by 火龍裸先生 on 2018/1/26.
15  * <p>
16  * 忽略https證書驗證
17  */
18 
19 public class SSLSocketClient
20 {
21     //獲取這個SSLSocketFactory  
22     public static SSLSocketFactory getSSLSocketFactory()
23     {
24         try
25         {
26             SSLContext sslContext = SSLContext.getInstance("SSL");
27             sslContext.init(null, getTrustManager(), new SecureRandom());
28             return sslContext.getSocketFactory();
29         }
30         catch (Exception e)
31         {
32             throw new RuntimeException(e);
33         }
34     }
35 
36     //獲取TrustManager  
37     private static TrustManager[] getTrustManager()
38     {
39         TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager()
40         {
41             @Override
42             public void checkClientTrusted(X509Certificate[] chain, String authType)
43             {
44             }
45 
46             @Override
47             public void checkServerTrusted(X509Certificate[] chain, String authType)
48             {
49             }
50 
51             @Override
52             public X509Certificate[] getAcceptedIssuers()
53             {
54                 return new X509Certificate[]{};
55             }
56         }};
57         return trustAllCerts;
58     }
59 
60     //獲取HostnameVerifier  
61     public static HostnameVerifier getHostnameVerifier()
62     {
63         HostnameVerifier hostnameVerifier = new HostnameVerifier()
64         {
65             @Override
66             public boolean verify(String s, SSLSession sslSession)
67             {
68                 return true;
69             }
70         };
71         return hostnameVerifier;
72     }
73 }

 

有了以上的工具類,經過OKHttpClient.Builder對象調用 「sslSocketFactory 」方法 和 「hostnameVerifier 」 方法。相似於以下:服務器

簡言之:dom

1 builder.sslSocketFactory(SSLSocketClient.getSSLSocketFactory());
2 builder.hostnameVerifier(SSLSocketClient.getHostnameVerifier());
相關文章
相關標籤/搜索