xUtils3 Https请求报错:javax.net.ssl.SSLPeerUnverifiedException: Hostname ***.****.**not verified,跳过证书检测
使用xUtils3发送https请求报错javax.net.ssl.SSLPeerUnverifiedException: Hostname ***.****.**not verified。
我想不验证证书直接进行访问(和http一样了)。
解决过程:
刚开始设置 (requestParams是参数对象)
/** 判断https证书是否成功验证 */
SSLContext sslContext = getSSLContext(MyApp.mContext);
if (null == sslContext) {
Utils.LogUtils("Error:Can't Get SSLContext!");
return;
}
requestParams.setSslSocketFactory(sslContext.getSocketFactory()); //绑定SSL证书(https请求)
/**
* 获取Https的证书
*
* @param context Activity(fragment)的上下文
* @return SSL的上下文对象
*/
private static SSLContext s_sSLContext = null;
private static SSLContext getSSLContext(Context context) {
try {
s_sSLContext = SSLContext.getInstance("TLS");
//信任所有证书 (官方不推荐使用)
s_sSLContext.init(null, new TrustManager[]{new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException {
}
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException {
}
}}, new SecureRandom());
return s_sSLContext;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
结果还是报错,网上搜了一下:

在设置信任所有证书前要执行setDefaultHostnameVerifier方法,可是Xutils3里面的requestParams并没有这个方法。怎么办,继续找。。。。
终于发现:
在初始化Xutitls时:
x.Ext.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
问题解决。