服务器配置了SSL证书后,Android端把http改成https之后也不能请求成功!
有一种是自己信任指定证书
另一种直接信任所有证书
我们直接信任所有证书新建工具类TrustAllSSL :
public class TrustAllSSL implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
public static SSLSocketFactory createSSLSocketFactory() {
SSLSocketFactory factory = null;
try {
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, new TrustManager[]{new TrustAllCerts()}, new SecureRandom());
factory = context.getSocketFactory();
} catch (Exception e) {
}
return factory;
}
public static class TrustAllHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
}
在OKhttp配置使用:
OkHttpClient client;//创建OkHttpClient对象。
client = new OkHttpClient.Builder()
.connectTimeout(15, TimeUnit.MINUTES)//单位是秒
.readTimeout(15, TimeUnit.MINUTES)
.sslSocketFactory(TrustAllSSL.createSSLSocketFactory())
.hostnameVerifier(new TrustAllCerts.TrustAllHostnameVerifier())
.build();