如果我們的ca證書是由第三方發布的不是自己生成的則不需要下面的配置 1.首先要將我們的ca證書放在工程的assert文件夾下在這里我們就不做說明了 2.下面是配置https的代碼
//設置Https 并設置超時時間 PRivate static OkHttpClient getSSLOkHttpClient(int timeOut) throws Exception { mOkHttpClient = new OkHttpClient();//讀取時長 AssetManager am = InnoFarmapplication.getAppContext().getAssets(); CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); InputStream caInput = am.open("ca.crt"); Certificate ca = certificateFactory.generateCertificate(caInput); String keyStoreType = KeyStore.getDefaultType(); KeyStore keyStore = KeyStore.getInstance(keyStoreType); keyStore.load(null, null); keyStore.setCertificateEntry("ca", ca); String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();//獲取默認的TrustManagerFactory算法名稱。 TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); tmf.init(keyStore); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, tmf.getTrustManagers(), null); OkHttpClient.Builder builder = mOkHttpClient.newBuilder(); builder.sslSocketFactory(sslContext.getSocketFactory()) .hostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLsession session) { if (hostname.equals(HttpHelper.HOST_NAME)) {// testacloudsys.innofarms.com return true; } return false; } }); builder.connectTimeout(timeOut, TimeUnit.SECONDS)//連接時長 .writeTimeout(timeOut, TimeUnit.SECONDS)//寫入時長 .readTimeout(timeOut, TimeUnit.SECONDS);//讀取時長 return builder.build(); }新聞熱點
疑難解答