1.
public static OkHttpClient getInstance() {
synchronized (OkHttpManager.class) {
if (okHttpClient == null) {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
// 超时时间
builder.connectTimeout(DEFAULT_TIME_OUT, TimeUnit.SECONDS);
builder.readTimeout(DEFAULT_READ_TIME_OUT, TimeUnit.SECONDS);
builder.writeTimeout(DEFAULT_READ_TIME_OUT, TimeUnit.SECONDS);
// 错误重连
builder.retryOnConnectionFailure(false);
SSLSocketClient.setSSLSocketFactory(builder);//SSL
builder.hostnameVerifier(SSLSocketClient.getHostnameVerifier());
okHttpClient = builder.build();
}
}
return okHttpClient;
}
2.
public static HostnameVerifier getHostnameVerifier() {
HostnameVerifier hostnameVerifier = (s, sslSession) -> true;
return hostnameVerifier;
}
/**
* 设置SSL
* @param builder
*/
public static void setSSLSocketFactory(OkHttpClient.Builder builder) {
final String CLIENT_TRUST_PASSWORD = "xxx";
final String CLIENT_AGREEMENT = "SSL";//使用协议
final String CLIENT_TRUST_KEYSTORE = "BKS";
try {
//取得SSL的SSLContext实例
SSLContext sslContext = SSLContext.getInstance(CLIENT_AGREEMENT);
//取得TrustManagerFactory的X509密钥管理器实例
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
//取得BKS密库实例
KeyStore tks = KeyStore.getInstance(CLIENT_TRUST_KEYSTORE);
InputStream is = ArApplication.getApplication().getResources().openRawResource(R.raw.xxx);
try {
tks.load(is, CLIENT_TRUST_PASSWORD.toCharArray());
} finally {
is.close();
}
//初始化密钥管理器
trustManagerFactory.init(tks);
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
throw new IllegalStateException("Unexpected default trust managers:"
+ Arrays.toString(trustManagers));
}
X509TrustManager trustManager = (X509TrustManager) trustManagers[0];
sslContext.init(null, new TrustManager[]{trustManager}, null);
builder.sslSocketFactory(sslContext.getSocketFactory(), trustManager);
} catch (Exception e) {
e.printStackTrace();
}
}