抛出的错误是这样的:

 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)

尝试过设置HttpsURLConnection.setDefaultHostnameVerifier(),不成功,估计是org.apache.http有自己的一套SSL东西,修改org.apache.http的主机名验证解决问题。

增加则用的一行:

SSLSocketFactory.getSocketFactory().setHostnameVerifier(new AllowAllHostnameVerifier());

同时import一下:

import org.apache.http.conn.ssl.AllowAllHostnameVerifier;import org.apache.http.conn.ssl.SSLSocketFactory;

如果你使用org.apache.http的话上面的就够了。


另外如果你使用原始的URLConnect的话请这样设置一下:

try {SSLContext sc = SSLContext.getInstance("TLS");sc.init(null, new TrustManager[] { new X509TrustManager() {@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType)throws CertificateException {}@Overridepublic X509Certificate[] getAcceptedIssuers() {return null;}} }, new SecureRandom());HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {@Overridepublic boolean verify(String arg0, SSLSession arg1) {return true;}});} catch (Exception e) {e.printStackTrace();}


之后就可以使用了:

String https = "https://www.google.com.hk";try {HttpsURLConnection conn = (HttpsURLConnection) new URL(https).openConnection();conn.setDoOutput(true);conn.setDoInput(true);conn.connect();BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));StringBuffer sb = new StringBuffer();String line;while ((line = br.readLine()) != null)sb.append(line);Log(sb.toString());} catch (Exception e) {e.printStackTrace();}



更多相关文章

  1. Android安装APK时出现Local path doesn't exist.错误
  2. Android部分错误以及解决方案汇总
  3. Android Studio 错误 Duplicate files copied in APK META-INF/L
  4. You must supply a layout_width attribute. 错误解决
  5. 如何使用ndk中addr2line工具查询so库中错误信息行数
  6. 解决导入Android例子时“Unable to resolve target 'android-x'
  7. Android Lint gradle错误处理
  8. Android Too many classes in --main-dex-list 错误原因及Androi
  9. 错误集合贴

随机推荐

  1. android中延迟执行某个任务
  2. Android(安卓)App如何接入Google Map(三)
  3. Android(java)学习笔记135:Android中assets
  4. Android 之 Project Butter 详细介绍
  5. android如何调用其他应用的方法或属性
  6. Android客户端与服务器的数据交互总结
  7. Android多媒体学习一:Android中Image的简
  8. android手机通过串口蓝牙透传模块与AVR单
  9. android init进程说明
  10. Android(安卓)MediaRecorder视频录制,多分