android httpClient 支持HTTPS的处理方式
来源:互联网 发布:mysql explain type 编辑:程序博客网 时间:2024/06/05 11:39
问题:
项目中Android https或http请求地址重定向为HTTPS的地址,相信很多人都遇到了这个异常(无终端认证): javax.NET.ssl.SSLPeerUnverifiedException: No peer certificate
解决过程:
1.没遇到过的问题,搜索吧,少年
log里出现这个异常,作者第一次遇到,不知道啥意思。看下字面意思,是ssl协议中没有终端认证。SSL?作者没用到ssl协议呀,只是通过httpClient请求一个重定向https的地址。
好吧,google下,知道了个差不多情况的帖子,http://www.eoeandroid.com/thread-161747-1-1.html。恩恩,一个不错的帖子,给出了个解决方案。照着来试下。添加个继承SSLSocketFactory的
自定义类。并在初始化httpclient支持https时,注册进去。看下面代码:
public class HttpClientHelper {0203 private static HttpClient httpClient;0405 private HttpClientHelper() {06 }0708 public static synchronized HttpClient getHttpClient() {0910 if (null == httpClient) {11 // 初始化工作12 try {13 KeyStore trustStore = KeyStore.getInstance(KeyStore14 .getDefaultType());15 trustStore.load(null, null);16 SSLSocketFactory sf = new SSLSocketFactoryEx(trustStore);17 sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); //允许所有主机的验证1819 HttpParams params = new BasicHttpParams();2021 HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);22 HttpProtocolParams.setContentCharset(params,23 HTTP.DEFAULT_CONTENT_CHARSET);24 HttpProtocolParams.setUseExpectContinue(params, true);2526 // 设置连接管理器的超时27 ConnManagerParams.setTimeout(params, 10000);28 // 设置连接超时29 HttpConnectionParams.setConnectionTimeout(params, 10000);30 // 设置socket超时31 HttpConnectionParams.setSoTimeout(params, 10000);3233 // 设置http https支持34 SchemeRegistry schReg = new SchemeRegistry();35 schReg.register(new Scheme("http", PlainSocketFactory36 .getSocketFactory(), 80));37 schReg.register(new Scheme("https", sf, 443));3839 ClientConnectionManager conManager = new ThreadSafeClientConnManager(40 params, schReg);4142 httpClient = new DefaultHttpClient(conManager, params);43 } catch (Exception e) {44 e.printStackTrace();45 return new DefaultHttpClient();46 }47 }48 return httpClient;49 }5051}5253class SSLSocketFactoryEx extends SSLSocketFactory {5455 SSLContext sslContext = SSLContext.getInstance("TLS");5657 public SSLSocketFactoryEx(KeyStore truststore)58 throws NoSuchAlgorithmException, KeyManagementException,59 KeyStoreException, UnrecoverableKeyException {60 super(truststore);6162 TrustManager tm = new X509TrustManager() {6364 @Override65 public java.security.cert.X509Certificate[] getAcceptedIssuers() {66 return null;67 }6869 @Override70 public void checkClientTrusted(71 java.security.cert.X509Certificate[] chain, String authType)72 throws java.security.cert.CertificateException {7374 }7576 @Override77 public void checkServerTrusted(78 java.security.cert.X509Certificate[] chain, String authType)79 throws java.security.cert.CertificateException {8081 }82 };8384 sslContext.init(null, new TrustManager[] { tm }, null);85 }8687 @Override88 public Socket createSocket(Socket socket, String host, int port,89 boolean autoClose) throws IOException, UnknownHostException {90 return sslContext.getSocketFactory().createSocket(socket, host, port,91 autoClose);92 }9394 @Override95 public Socket createSocket() throws IOException {96 return sslContext.getSocketFactory().createSocket();97 }98}
http://blog.csdn.net/lihenair/article/details/17441169
0 0
- android httpClient 支持HTTPS的处理方式
- android httpClient 支持HTTPS的2种处理方式
- android httpClient 支持HTTPS的2种处理方式
- android httpClient 支持HTTPS的2种处理方式
- android httpClient 支持HTTPS的2种处理方式
- android httpClient 支持HTTPS的2种处理方式
- android httpClient 支持HTTPS的2种处理方式
- android httpClient 支持HTTPS的2种处理方式
- android httpClient 支持HTTPS的2种处理方式
- android httpClient 支持HTTPS的2种处理方式
- android httpClient 支持HTTPS的2种处理方式
- android httpClient 支持HTTPS的2种处理方式
- android httpClient 支持HTTPS的2种处理方式
- android httpClient 支持HTTPS的2种处理方式
- android httpClient 支持HTTPS的2种处理方式
- android httpClient 支持HTTPS的2种处理方式
- android httpClient 支持HTTPS的2种处理方式
- android httpClient 支持HTTPS的2种处理方式
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.2
- Windows环境下创建MySQL主从复制
- Struts2框架篇
- android_17_AndroidTestCase单元测试
- 【codeforces 546A】Soldier and Bananas
- android httpClient 支持HTTPS的处理方式
- 《项目管理利器Maven》学习(二):手动创建第一个Maven案例maven01
- MXnet实战心得---值得拥有
- 接口的作用和使用原则
- php基础
- mysql数据库中命令行下常用命令的操作(增、删、改、查)和数据类型
- jQuery EasyUI 1.2.4 API 中文文档(完整)目录
- Flutter进阶—质感设计之弹出菜单
- LNMP一键安装 (V1.3)