記錄這個的緣由,是由於不少時候,由於後臺配置的證書不正確致使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());