因为最近公司的open api服务器访问协议换成了https,所以 android 在使用okhttp 走https 访问的时候遇到了证书信任的问题,

在这里把我走过的弯路记下来,一如既往的话不多说,上码:

OkHttpClientsClient=newOkHttpClient();//设置超时时间sClient.setConnectTimeout(8000,TimeUnit.MILLISECONDS);sClient.setReadTimeout(8000,TimeUnit.MILLISECONDS);//注册拦截器sClient.interceptors().add(newBaseInterceptor(context));

第一种方式:

sClient.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

运行结果:

javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:Trustanchorforcertificationpathnotfound.11-2611:17:57.26417106-17268/com.dooioo.addressbookW/System.err:atcom.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:410)11-2611:17:57.26417106-17268/com.dooioo.addressbookW/System.err:atcom.squareup.okhttp.Connection.connectTls(Connection.java:235)11-2611:17:57.26417106-17268/com.dooioo.addressbookW/System.err:atcom.squareup.okhttp.Connection.connectSocket(Connection.java:199)11-2611:17:57.26417106-1726

以失败告终!!!!!

经过多处查询后采用

第二种方案:

sClient.setHostnameVerifier(newHostnameVerifier(){@Overridepublicbooleanverify(Stringhostname,SSLSessionsession){returntrue;}});

怀着侥幸的心理运行了一下

运行结果:

javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:Trustanchorforcertificationpathnotfound.11-2716:18:54.41716801-16946/com.dooioo.addressbookW/System.err:atcom.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:410)11-2716:18:54.41716801-16946/com.dooioo.addressbookW/System.err:atcom.squareup.okhttp.Connection.connectTls(Connection.java:235)11-2716:18:54.41716801-16946/com.dooioo.addressbookW/System.err:atcom.squareup.okhttp.Connection.connectSocket(Connection.java:199)11-2716:18:54.42716801-16946/com.dooioo.addressbookW/System.err:atcom.squareup.okhttp.Connection.connect(Connection.java:172)11-2716:18:54.42716801-16943/com.dooioo.addressbookW/System.err:atjavax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:Trustanchorforcertificationpathnotfound.11-2716:18:54.42716801-16943/com.dooioo.addressbookW/System.err:atcom.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:410)11-2716:18:54.42716801-16943/com.dooioo.addressbookW/System.err:atcom.squareup.okhttp.Connection.connectTls(Connection.java:235)11-2716:18:54.42716801-16943/com.dooioo.addressbookW/System.err:atcom.squareup.okhttp.Connection.connectSocket(Connection.java:199)11-2716:18:54.42716801-16943/com.dooioo.addressbookW/System.err:atcom.squareup.okhttp.Connection.connect(Connection.java:172)11-2716:18:54.42716801-16943/com.dooioo.addressbookW/System.err:atcom.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:367)11-2716:18:54.42716801-16946/com.dooioo.addressbookW/System.err:atcom.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:367)11-2716:18:54.42716801-16943/com.dooioo.addressbookW/System.err:atcom.squareup.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128)11-2716:18:54.42716801-16943/com.dooioo.addressbookW/System.err:atcom.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:328)11-2716:18:54.42716801-16943/com.dooioo.addressbookW/System.err:atcom.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:245)

同样还是以失败而告终呢,这下怎么办呢,总不能说部解决吧,只好硬着头皮继续找资料

最终的解决方案:

SSLContextsc=SSLContext.getInstance("SSL");sc.init(null,newTrustManager[]{newX509TrustManager(){@OverridepublicvoidcheckClientTrusted(X509Certificate[]chain,StringauthType)throwsCertificateException{}@OverridepublicvoidcheckServerTrusted(X509Certificate[]chain,StringauthType)throwsCertificateException{}@OverridepublicX509Certificate[]getAcceptedIssuers(){returnnull;}}},newSecureRandom());sClient.setSslSocketFactory(sc.getSocketFactory());sClient.setHostnameVerifier(newHostnameVerifier(){@Overridepublicbooleanverify(Stringhostname,SSLSessionsession){returntrue;}});

最终解决问题,成功信任所有证书!!!!

当然了,这个最好是用在开发环境上,正式环境的证书信息,最好不要用这种全部信任的方式,不然https 就形同虚设了……

对应的问题请移步>>>>>>>>>Android https 信任

更多相关文章

  1. Android Studio配置NDK编译环境
  2. [Android实例] android 的NDK在Windwos环境搭建
  3. android sha1和签名证书的学习
  4. Android Opencv 410 集成 以及 jni环境配置 图像 处理个人总结
  5. android如何静默方式来安装apk
  6. Android属性动画之XML定义方式
  7. Android 4.x 获取存储卡路径的方式

随机推荐

  1. 卡片式UI的总结 android
  2. Android Audio Play Out Channel
  3. protobuf系列-grpc快速开始(Android)
  4. Android中String类型进行比较大小
  5. 取值 1111
  6. 2.1做拐角的bug
  7. Android NDK开发method GetStringUTFChar
  8. Android简明开发教程二:安装开发环境
  9. android页面全屏及状态栏和导航栏的(沉浸
  10. Android计量单位px,in,mm,pt,dp,dip,sp和