android https 未认证,android HTTPS 访问 安全认证

在访问HTTPS时需要安装认证在默认情况下,设置所有都可以

创建一个HttpClient 这个设置认证那些

private static HttpClient client = HttpClientHelper.getHttpClient();

public static String HTTPPostJson(String url, JSONObject params) {

// HttpClient client = new DefaultHttpClient();

HttpPost post = new HttpPost(url);

String responseStr = null;

try {

StringEntity entity = new StringEntity(params.toString(),HTTP.UTF_8);

entity.setContentType("application/json");

post.setEntity(entity);

HttpResponse response = client.execute(post);

if (HttpURLConnection.HTTP_OK != response.getStatusLine()

.getStatusCode()) {

Log.e("post result code", ""+response.getStatusLine()

.getStatusCode());

return null;

}

HttpEntity entity2 = response.getEntity();

responseStr = EntityUtils.toString(entity2);

} catch (Exception e) {

e.printStackTrace();

}

return responseStr;

}

HttpClientHelper.java

package com.weima.smarthome.utils;

import java.io.IOException;

import java.io.InputStream;

import java.net.InetAddress;

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 java.security.cert.CertificateFactory;

import javax.net.ssl.SSLContext;

import javax.net.ssl.TrustManager;

import javax.net.ssl.X509TrustManager;

import org.apache.http.HttpVersion;

import org.apache.http.client.HttpClient;

import org.apache.http.conn.ClientConnectionManager;

import org.apache.http.conn.params.ConnManagerParams;

import org.apache.http.conn.scheme.PlainSocketFactory;

import org.apache.http.conn.scheme.Scheme;

import org.apache.http.conn.scheme.SchemeRegistry;

import org.apache.http.conn.scheme.SocketFactory;

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

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;

import org.apache.http.params.BasicHttpParams;

import org.apache.http.params.HttpConnectionParams;

import org.apache.http.params.HttpParams;

import org.apache.http.params.HttpProtocolParams;

import org.apache.http.protocol.HTTP;

import android.content.res.AssetManager;

public class HttpClientHelper {

private static HttpClient httpClient;

private static final String CLIENT_KEY_KEYSTORE = "BKS"; //"JKS";//密库,这里用的是BouncyCastle密库

private static final String CLIENT_TRUST_KEYSTORE = "BKS"; //"JKS";//

private static final String CLIENT_KET_PASSWORD = "***"; //私钥密码

private HttpClientHelper() {

}

public static synchronized HttpClient getHttpClient() {

if (null == httpClient) {

// 初始化工

try {

// 读取证书

// KeyStore kks = KeyStore.getInstance(KeyStore.getDefaultType());//BKS or JKS android只支持bks格式的密库,

// kks.load(context.getAssets().open("cacerts.bks"), CLIENT_KET_PASSWORD.toCharArray());

KeyStore kks = KeyStore.getInstance(KeyStore

.getDefaultType());

//添加认证

kks.load(null, null);

SSLSocketFactory sf = new SSLSocketFactoryEx(kks);

sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); //允许?主机的验?

HttpParams params = new BasicHttpParams();

HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);

HttpProtocolParams.setContentCharset(params,

HTTP.UTF_8);

HttpProtocolParams.setUseExpectContinue(params, true);

// 设置连接管理器的超时

ConnManagerParams.setTimeout(params, 10000);

// 设置连接超时

HttpConnectionParams.setConnectionTimeout(params, 10000);

// 设置socket超时

HttpConnectionParams.setSoTimeout(params, 10000);

// 设置http https支持

SchemeRegistry schReg = new SchemeRegistry();

schReg.register(new Scheme("http", PlainSocketFactory

.getSocketFactory(), 55555));

schReg.register(new Scheme("https", (SocketFactory) sf, 55556));

ClientConnectionManager conManager = new ThreadSafeClientConnManager(

params, schReg);

httpClient = new DefaultHttpClient(conManager, params);

} catch (Exception e) {

e.printStackTrace();

return new DefaultHttpClient();

}

}

return httpClient;

}

}

class SSLSocketFactoryEx extends SSLSocketFactory {

SSLContext sslContext = SSLContext.getInstance("TLS");

public SSLSocketFactoryEx(KeyStore truststore)

throws NoSuchAlgorithmException, KeyManagementException,

KeyStoreException, UnrecoverableKeyException {

super(truststore);

TrustManager tm = new X509TrustManager() {

@Override

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();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值