转自:http://www.eoeandroid.com/thread-161747-1-1.html?_dsign=0c24eb02

不少同学在做HTTP请求新浪授权或新浪数据的时候会出现 javax.net.ssl.SSLPeerUnverifiedException: No peer certificate的异常。现给出解决方法(已通过测试)。

写了一个自定义类继承SSLSocketFactory:

  1. import java.io.IOException;
  2. import java.net.Socket;
  3. import java.net.UnknownHostException;
  4. import java.security.KeyManagementException;
  5. import java.security.KeyStore;
  6. import java.security.KeyStoreException;
  7. import java.security.NoSuchAlgorithmException;
  8. import java.security.UnrecoverableKeyException;
  9. import javax.net.ssl.SSLContext;
  10. import javax.net.ssl.TrustManager;
  11. import javax.net.ssl.X509TrustManager;
  12. import org.apache.http.conn.ssl.SSLSocketFactory;
  13. public class SSLSocketFactoryEx extends SSLSocketFactory {
  14. SSLContext sslContext = SSLContext.getInstance("TLS");
  15. public SSLSocketFactoryEx(KeyStore truststore)
  16. throws NoSuchAlgorithmException, KeyManagementException,
  17. KeyStoreException, UnrecoverableKeyException {
  18. super(truststore);
  19. TrustManager tm = new X509TrustManager() {
  20. public java.security.cert.X509Certificate[] getAcceptedIssuers() {return null;}
  21. @Override
  22. public void checkClientTrusted(
  23. java.security.cert.X509Certificate[] chain, String authType)
  24. throws java.security.cert.CertificateException {}
  25. @Override
  26. public void checkServerTrusted(
  27. java.security.cert.X509Certificate[] chain, String authType)
  28. throws java.security.cert.CertificateException {}
  29. };
  30. sslContext.init(null, new TrustManager[] { tm }, null);
  31. }
  32. @Override
  33. public Socket createSocket(Socket socket, String host, int port,boolean autoClose) throws IOException, UnknownHostException {
  34. return sslContext.getSocketFactory().createSocket(socket, host, port,autoClose);
  35. }
  36. @Override
  37. public Socket createSocket() throws IOException {
  38. return sslContext.getSocketFactory().createSocket();
  39. }
  40. }

复制代码

再来看看如何做回调:

  1. public static HttpClient getNewHttpClient() {
  2. try {
  3. KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
  4. trustStore.load(null, null);
  5. SSLSocketFactory sf = new SSLSocketFactoryEx(trustStore);
  6. sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
  7. HttpParams params = new BasicHttpParams();
  8. HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
  9. HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
  10. SchemeRegistry registry = new SchemeRegistry();
  11. registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
  12. registry.register(new Scheme("https", sf, 443));
  13. ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
  14. return new DefaultHttpClient(ccm, params);
  15. } catch (Exception e) {
  16. return new DefaultHttpClient();
  17. }
  18. }

复制代码

自定义SSLSocketFactory相关推荐

  1. 如何为每个URL连接设置自定义SSLSocketFactory的TrustManager

    从javadoc中我们可以看到javax.net.ssl.HttpsURLConnection提供了一个静态方法来用setDefaultSSLSocketFory()方法覆盖. 这样,您就可以提供一个 ...

  2. 通过HTTPS使用HttpClient信任所有证书

    最近在Https上发布了有关HttpClient的问题( 在此处找到 ). 我取得了一些进展,但遇到了新问题. 与我的最后一个问题一样,我似乎找不到任何适合我的示例. 基本上,我希望我的客户端接受任何 ...

  3. 一文读懂Https的安全性原理、数字证书、单项认证、双项认证等

    为什么80%的码农都做不了架构师?>>>    本文引用了作者Smily(博客:blog.csdn.net/qq_20521573)的文章内容,感谢无私分享. 1.前言 目前苹果公司 ...

  4. Android端打开HttpDns的正确姿势

    什么是HttpDns? DNS服务用于在网络请求时,将域名转为IP地址.传统的基于UDP协议的公共DNS服务极易发生DNS劫持,从而造成安全问题.HttpDns服务则是基于HTTP协议自建DNS服务, ...

  5. 【ssl认证、证书】java中的ssl语法API说明(SSLContext)、与keytool 工具的联系

    文章目录 1. 前言 java中的ssl语法与keytool 工具的联系 2. SSLContext的体系 2.1 KeyStore 2.1.1 通过证书库文件创建: 2.1.2 随机生成自签名证书库 ...

  6. HTTPS IP直连问题小结

    背景 任何一个移动APP项目都离不开网络接入功能,提升网络接入的质量几乎是所有移动项目的需求.很多项目都会引入HTTP DNS作为网络接入最基础也是最重要的优化之一.HTTP DNS的核心是后台下发某 ...

  7. Android5.0-10.0各版本行为变更

    Android Q 行为变更 非 SDK 接口限制 为了帮助确保应用稳定性和兼容性,Android 平台开始限制您的应用可在 Android 9(API 级别 28)中使用哪些非 SDK 接口.And ...

  8. 解决android4.4以下sslv3 alert handshake failure和protocol TLSv1.3 is not supported的问题

    本文主旨是在不升级gradle版本和compile sdk的情况下解决https连接失败的问题 由于最近后台服务器升级,http改成https,而且使用的是Tlsv1.3 协议 导致了客户端https ...

  9. 微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应

    微信5.0发布 2013年8月5日,伴随着微信5.0 iPhone版的发布,公众平台也进行了重要的更新,主要包括: 1)运营主体为组织,可选择成为服务号或者订阅号: 2)服务号可以申请自定义菜单: 3 ...

最新文章

  1. 人生快乐之道(组图)
  2. 今天下棋,结合以前一些技巧的总结
  3. vector作为参数传递到dll问题
  4. 如何为自己的项目在pycharm中设置debug?
  5. 如何获取UIWebView中全屏播放视频事件
  6. 东北大学计算机技术考研大纲,东北大学考研大纲
  7. python 在线字典_python3
  8. python3线程池爬虫_python3多线程爬虫中如何变量?
  9. 嵌入式linux运行编译器,gcc编译器的使用
  10. LeetCode3 无重复字符的最长子串
  11. php设置 uploadtmpdir_PHP上传 找不到临时文件夹的解决方法
  12. kali免杀工具shellter
  13. teamtalk原理
  14. Paraview快捷键操作
  15. Exp3 免杀原理与实践 20154328 常城
  16. eureka:自我保护机制_对自我怀疑的开发人员:您足够好吗?
  17. 『踩坑』pyechart绘图不出图的解决方案
  18. GEE学习笔记(基础篇)更新中
  19. tm4c123gxl库函数调包侠养成(四)——————串口发送的基本配置
  20. git版本回退到某一次提交

热门文章

  1. Spring Boot (二)集成Mybatis、Druid
  2. UE4 Matinee的动画倒播
  3. Python实现简易版学生信息管理系统,包含源码及相关实现说明~
  4. 财务报告及会计基础知识
  5. android 酷炫启动页,RxJava实践之打造酷炫启动页
  6. PLSQL开发笔记和小结
  7. 消除oracle 中 job 的时间误差?
  8. 使用 PHP-FFMpeg 操作视频/音频文件(转)
  9. 图像处理之高斯混合模型
  10. MOSFET及MOSFET驱动电路总结