OkHttp报错javax.net.ssl.SSLHandshakeException: Handshake failed
来源:互联网 发布:mac输入法下载安装 编辑:程序博客网 时间:2024/05/17 15:57
当你看内容前,先确认下是否自己的手机或模拟器与网络时间相同。如果不同,设置后,看是否解决,如果没有解决,再看下面的内容。
在开发中,使用的数据请求是Okhttp进行数据请求,当请求到Https的时候,出行证书错误,我的使用场景是,获取省市县三级地址数据,在模拟器上ok的,但当使用真机测试的时候发现,无法获取数据,而且报错是:
javax.net.ssl.SSLHandshakeException: com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException
javax.net.ssl.SSLHandshakeException: com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate: Certificate not valid until Sat Nov 08 08:58:58 GMT+08:00 2014 (compared to Tue Jan 05 01:46:58 GMT+08:00 2010)
Could not validate certificate这句说明在使用OkHttp调用https接口的时候,报了SSLHandshakeException的异常,看了网上的资料,主要是服务器端使用了未被信任的证书:
原文博主地址:http://blog.csdn.net/voidmain_123/article/details/52703464
简单粗暴的解决方法:
Okhttp信任所有证书
在获取OkHttpClient的时候不使用new OkhttpClinet,使用如下方法获取,然后后面的超时等设置,还是一样的。
未修改前
mOkHttpClient = new OkHttpClient().newBuilder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .build();
修改后
mOkHttpClient =gettUnsafeOkHttpClient().newBuilder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .build();
getUnsafeOkHttpClient()
private static OkHttpClient getUnsafeOkHttpClient() { try { // Create a trust manager that does not validate certificate chains final TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { @Override public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { } @Override public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { } @Override public java.security.cert.X509Certificate[] getAcceptedIssuers() { return new java.security.cert.X509Certificate[]{}; } } }; // Install the all-trusting trust manager final SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); // Create an ssl socket factory with our all-trusting manager final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.sslSocketFactory(sslSocketFactory); builder.hostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }); OkHttpClient okHttpClient = builder.build(); return okHttpClient; } catch (Exception e) { throw new RuntimeException(e); } }
测试以后可以使用,原文博主也说,这个方法可能存在其他问题。但是是最简单的解决方式
后面测试中发现,是我的手机时间不是北京时间,哎,坑呐。。。。
阅读全文
0 0
- OkHttp报错javax.net.ssl.SSLHandshakeException: Handshake failed
- OkHttp报错javax.net.ssl.SSLHandshakeException: Handshake failed
- OkHttp报错javax.net.ssl.SSLHandshakeException: Handshake failed
- javax.net.ssl.SSLHandshakeException: Handshake failed
- 使用https出错javax.net.ssl.SSLHandshakeException: Handshake failed
- com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: Handshake failed
- 【LeanCloud之坑】javax.net.ssl.SSLHandshakeException:Handshake failed
- 解决OKHttp3 报OKHTTP javax.net.ssl.SSLHandshakeException错误
- javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
- 报错javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException
- javax.net.ssl.SSLHandshakeException
- javax.net.ssl.SSLHandshakeException
- javax.net.ssl.SSLHandshakeException
- SSL/TLS的Handshake过程与javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure异常
- SSL/TLS的Handshake过程与javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure异常
- SSL/TLS的Handshake过程与javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure异常
- javax.net.ssl.SSLHandshakeException:PKIX path building failed解决方法
- android 访问https 证书问题 报错javax.net.ssl.SSLHandshakeException
- mac下查看.mobileprovision文件
- 门描述符(gate descriptors)总结
- Cglib的动态代理
- Netty教程系列(一)——netty入门应答程序
- response.setContentType和request.setCharacterEncoding()区别
- OkHttp报错javax.net.ssl.SSLHandshakeException: Handshake failed
- Hyperledger Fabric1.0架构概览
- 如何使用控制台安装mysql-5.6.17-win32?
- linux dump_stack
- 遮蔽元素和去除遮蔽
- change()事件及val()/html()方法不会触发change事件
- 用正则表达式进行复杂密码校验
- Android studio更新到2.3后一直building
- docker+nexus+jenkins+java+maven