自定义SSLSocketFactory
转自:http://www.eoeandroid.com/thread-161747-1-1.html?_dsign=0c24eb02
不少同学在做HTTP请求新浪授权或新浪数据的时候会出现 javax.net.ssl.SSLPeerUnverifiedException: No peer certificate的异常。现给出解决方法(已通过测试)。
写了一个自定义类继承SSLSocketFactory:
- import java.io.IOException;
- import java.net.Socket;
- import java.net.UnknownHostException;
- import java.security.KeyManagementException;
- import java.security.KeyStore;
- import java.security.KeyStoreException;
- import java.security.NoSuchAlgorithmException;
- import java.security.UnrecoverableKeyException;
- import javax.net.ssl.SSLContext;
- import javax.net.ssl.TrustManager;
- import javax.net.ssl.X509TrustManager;
- import org.apache.http.conn.ssl.SSLSocketFactory;
- public class SSLSocketFactoryEx extends SSLSocketFactory {
- SSLContext sslContext = SSLContext.getInstance("TLS");
- public SSLSocketFactoryEx(KeyStore truststore)
- throws NoSuchAlgorithmException, KeyManagementException,
- KeyStoreException, UnrecoverableKeyException {
- super(truststore);
- TrustManager tm = new X509TrustManager() {
- public java.security.cert.X509Certificate[] getAcceptedIssuers() {return null;}
- @Override
- public void checkClientTrusted(
- java.security.cert.X509Certificate[] chain, String authType)
- throws java.security.cert.CertificateException {}
- @Override
- public void checkServerTrusted(
- java.security.cert.X509Certificate[] chain, String authType)
- throws java.security.cert.CertificateException {}
- };
- sslContext.init(null, new TrustManager[] { tm }, null);
- }
- @Override
- public Socket createSocket(Socket socket, String host, int port,boolean autoClose) throws IOException, UnknownHostException {
- return sslContext.getSocketFactory().createSocket(socket, host, port,autoClose);
- }
- @Override
- public Socket createSocket() throws IOException {
- return sslContext.getSocketFactory().createSocket();
- }
- }
复制代码
再来看看如何做回调:
- public static HttpClient getNewHttpClient() {
- try {
- KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
- trustStore.load(null, null);
- SSLSocketFactory sf = new SSLSocketFactoryEx(trustStore);
- sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
- HttpParams params = new BasicHttpParams();
- HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
- HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
- SchemeRegistry registry = new SchemeRegistry();
- registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
- registry.register(new Scheme("https", sf, 443));
- ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
- return new DefaultHttpClient(ccm, params);
- } catch (Exception e) {
- return new DefaultHttpClient();
- }
- }
复制代码
自定义SSLSocketFactory相关推荐
- 如何为每个URL连接设置自定义SSLSocketFactory的TrustManager
从javadoc中我们可以看到javax.net.ssl.HttpsURLConnection提供了一个静态方法来用setDefaultSSLSocketFory()方法覆盖. 这样,您就可以提供一个 ...
- 通过HTTPS使用HttpClient信任所有证书
最近在Https上发布了有关HttpClient的问题( 在此处找到 ). 我取得了一些进展,但遇到了新问题. 与我的最后一个问题一样,我似乎找不到任何适合我的示例. 基本上,我希望我的客户端接受任何 ...
- 一文读懂Https的安全性原理、数字证书、单项认证、双项认证等
为什么80%的码农都做不了架构师?>>> 本文引用了作者Smily(博客:blog.csdn.net/qq_20521573)的文章内容,感谢无私分享. 1.前言 目前苹果公司 ...
- Android端打开HttpDns的正确姿势
什么是HttpDns? DNS服务用于在网络请求时,将域名转为IP地址.传统的基于UDP协议的公共DNS服务极易发生DNS劫持,从而造成安全问题.HttpDns服务则是基于HTTP协议自建DNS服务, ...
- 【ssl认证、证书】java中的ssl语法API说明(SSLContext)、与keytool 工具的联系
文章目录 1. 前言 java中的ssl语法与keytool 工具的联系 2. SSLContext的体系 2.1 KeyStore 2.1.1 通过证书库文件创建: 2.1.2 随机生成自签名证书库 ...
- HTTPS IP直连问题小结
背景 任何一个移动APP项目都离不开网络接入功能,提升网络接入的质量几乎是所有移动项目的需求.很多项目都会引入HTTP DNS作为网络接入最基础也是最重要的优化之一.HTTP DNS的核心是后台下发某 ...
- Android5.0-10.0各版本行为变更
Android Q 行为变更 非 SDK 接口限制 为了帮助确保应用稳定性和兼容性,Android 平台开始限制您的应用可在 Android 9(API 级别 28)中使用哪些非 SDK 接口.And ...
- 解决android4.4以下sslv3 alert handshake failure和protocol TLSv1.3 is not supported的问题
本文主旨是在不升级gradle版本和compile sdk的情况下解决https连接失败的问题 由于最近后台服务器升级,http改成https,而且使用的是Tlsv1.3 协议 导致了客户端https ...
- 微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应
微信5.0发布 2013年8月5日,伴随着微信5.0 iPhone版的发布,公众平台也进行了重要的更新,主要包括: 1)运营主体为组织,可选择成为服务号或者订阅号: 2)服务号可以申请自定义菜单: 3 ...
最新文章
- 人生快乐之道(组图)
- 今天下棋,结合以前一些技巧的总结
- vector作为参数传递到dll问题
- 如何为自己的项目在pycharm中设置debug?
- 如何获取UIWebView中全屏播放视频事件
- 东北大学计算机技术考研大纲,东北大学考研大纲
- python 在线字典_python3
- python3线程池爬虫_python3多线程爬虫中如何变量?
- 嵌入式linux运行编译器,gcc编译器的使用
- LeetCode3 无重复字符的最长子串
- php设置 uploadtmpdir_PHP上传 找不到临时文件夹的解决方法
- kali免杀工具shellter
- teamtalk原理
- Paraview快捷键操作
- Exp3 免杀原理与实践 20154328 常城
- eureka:自我保护机制_对自我怀疑的开发人员:您足够好吗?
- 『踩坑』pyechart绘图不出图的解决方案
- GEE学习笔记(基础篇)更新中
- tm4c123gxl库函数调包侠养成(四)——————串口发送的基本配置
- git版本回退到某一次提交