每个协议有自己的一套SSL东西,Android 链接https经常会抛出如下错误

 javax.net.ssl.SSLException: hostname in certificate didn't match:  !=  OR  OR  at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:185) at org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:54) at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:114) at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:95) at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:165) at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)

如果使用org.apache.http,修改主机名验证解决问题

import org.apache.http.conn.ssl.AllowAllHostnameVerifier;  import org.apache.http.conn.ssl.SSLSocketFactory;  
SSLSocketFactory.getSocketFactory().setHostnameVerifier(new AllowAllHostnameVerifier()); 

如果使用原生URLConnect的话添加如下设置

try {             SSLContext sc = SSLContext.getInstance("TLS");      sc.init(null, new TrustManager[] { new 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 null;          }      } }, new SecureRandom());      HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());      HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {          @Override          public boolean verify(String arg0, SSLSession arg1) {              return true;          }      });  } catch (Exception e) {      e.printStackTrace();  }  


更多相关文章

  1. Couldn't find meta-data for provider with authority
  2. Android(安卓)项目打包时出现“TaskExecutionException :':app:me
  3. android 一个app启动另一个App的几种方法
  4. android studio 4.0. gradle 4.0. tinker集成报错
  5. 在mac 上配置AndroidStudio碰到的坑
  6. Android的常见错误及解决办法
  7. 【Android】魅族Flyme OS 3摄像头无法预览的问题
  8. Android(安卓)Neon
  9. Android(安卓)音乐播放器 下一曲 连续跳几首歌

随机推荐

  1. 五种SQL Server分页存储过程的方法及性能
  2. 整理MySql常用查询语句(23种)
  3. 开窗函数有浅入深详解(一)
  4. 彻底删除SQL Server注册表的方法
  5. SQL Server 2005附加数据库时Read-Only错
  6. 解决SQL Server无法启动的小技巧
  7. asp.net中如何调用sql存储过程实现分页
  8. SQL Server数据库删除数据集中重复数据实
  9. sql server关键字详解大全(图文)
  10. SQL Server数据库按百分比查询出表中的记