android HTTPS 访问 安全认证
2013-12-20 15:57
399 查看
在访问HTTPS时需要安装认证在默认情况下,设置所有都可以
创建一个HttpClient 这个设置认证那些
本文出自 “android随记” 博客,请务必保留此出处http://xuxiong3316.blog.51cto.com/8126857/1343262
创建一个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(); } }
本文出自 “android随记” 博客,请务必保留此出处http://xuxiong3316.blog.51cto.com/8126857/1343262
相关文章推荐
- tomcat 配置 https, android端 访问
- android通过okhttp访问自签名https网站(单向)
- Android进阶2之Https访问网络资源(获取网络图片)
- React Native之Android 5.0以下系统WebView访问https页面变成空白页
- 关于Android中https的网络访问的问题z
- Android 访问不受信任的HTTPS,无需证书
- android HTTPURLConnection解决不能访问HTTPs请求
- Android如何使用WebView访问https的网站
- 无法安装ADT(无法访问https://dl-ssl.google.com/android/eclipse/) 的解决方法
- Android 6.0 https 访问报错
- android HttpClient 访问https
- Android 6.0 HTTPS SSL 无法访问,提示Handshake failed(握手失败),解决方案
- Android 使用WebView访问https的url——处理SslError
- android 安装 SDK的时候报错!!! 他说拒绝访问https://dl-ssl.google.com??
- Android开发框架xUtils3.x新手教学(二)HTTPS访问
- eclipse ADT在线安装 https://dl-ssl.google.com/android/eclipse无法访问
- Android如何使用WebView访问https的网站
- Android网络访问之http、https、 cookie的使用
- android webview 访问https页面 SslError 处理
- android 之HTTPS安全访问