`
gaosililn
  • 浏览: 73088 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

DefaultHttpClient绕过安全认证访问https链接

    博客分类:
  • Java
 
阅读更多

在java中,使用DefaultHttpClient访问https下的链接,

DefaultHttpClient client = new DefaultHttpClient();

 会有一个异常 javax.net.ssl.SSLHandshakeException:,这个异常则是https的安全认证所引发的。怎么来绕过安全认证实现访问https的链接呢?

直接上代码:

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 java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

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

/**
 * 
 * @author 
 * @data 2016年7月27日 上午11:29:34
 * @see 
 * @version 1.0
 *
 */
@SuppressWarnings("deprecation")
public class EasySSLSocketFactory extends SSLSocketFactory {
	SSLContext sslContext = SSLContext.getInstance("TLS");

	public EasySSLSocketFactory(KeyStore truststore)
			throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
		super(truststore);
		TrustManager tm = new X509TrustManager() {
			public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
			}

			public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
			}

			public X509Certificate[] getAcceptedIssuers() {
				return null;
			}
		};
		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();
	}
}

 

import java.security.KeyStore;

import org.apache.http.HttpVersion;
import org.apache.http.conn.ClientConnectionManager;
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.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.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;

import com.kingdee.Factory.EasySSLSocketFactory;

/**
 * HttpClient 绕过https
 * @author 
 * @data 2016年7月27日 上午11:24:01
 * @see 
 * @version 1.0
 *
 */

@SuppressWarnings("deprecation")
public class HttpClientUtil {

	/**
	 * 获取HttpClient
	 * 
	 * @return
	 */
	public static DefaultHttpClient getNewHttpClient() {
		try {
			KeyStore trustStore = null;
			EasySSLSocketFactory sf = null;
			trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
			trustStore.load(null, null);
			sf = new EasySSLSocketFactory(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();
		}
	}

}

 

// 获取能够忽略https的安全验证的HttpClient
		DefaultHttpClient client = HttpClientUtil.getNewHttpClient();

 

分享到:
评论

相关推荐

    DefaultHttpClient_httpsDemo.rar

    本示例"DefaultHttpClient_httpsDemo"聚焦于如何使用`DefaultHttpClient`来实现HTTPS请求,并且绕过安全认证,这在特定场景下可能是必要的,比如测试环境或自签名证书的应用。 首先,理解HTTPS是HTTP(超文本传输...

    DefaultHttpClient使用

    《DefaultHttpClient的深度解析》 在Java开发中,网络通信是一个不可或缺的部分,而Apache HttpClient库则是其中的一个常用工具。特别是`DefaultHttpClient`类,它是HttpClient库中的核心组件,提供了丰富的HTTP...

    httpclient绕过验证码直接抓取

    "HttpClient绕过验证码直接抓取" HttpClient是一种常用的网络请求库,常用于网络爬虫、自动化测试、数据爬取等领域。今天,我们将讨论如何使用HttpClient绕过验证码直接抓取网站数据。 绕过验证码的原理 验证码是...

    Android使用HttpClient和HttpsUrlConnection两种方式访问https网站

    在Android开发中,与服务器进行通信是不可或缺的一部分,特别是对于HTTPS协议,它为网络通信提供了安全性和隐私保护。本文将详细介绍如何使用`HttpClient`和`HttpsURLConnection`两种方式来访问HTTPS网站,包括验证...

    httpClient4.5配置SSL绕过https证书,httpClient过时替代方法-附件资源

    httpClient4.5配置SSL绕过https证书,httpClient过时替代方法-附件资源

    基于Tomcat搭建SSL双向认证示例【100012422】

    本示例将深入探讨如何使用Tomcat搭建SSL(Secure Socket Layer)双向认证环境,以及通过Java原生类库SSLSocket进行编程,以及使用Apache的Httpclient库模拟安全的客户端请求。以下是对这些知识点的详细讲解。 首先...

    httpclient jar

    import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.CoreConnectionPNames; import org.apache....

    Android学习之HttpClient练习(一)

    HttpClient httpClient = new DefaultHttpClient(); ``` **3. 设置HTTP请求参数** HttpClient允许我们创建`HttpGet`或`HttpPost`对象来设置URL和其他请求参数。例如,创建一个GET请求: ```java ...

    访问网络,请求图片

    在IT行业中,网络请求是应用程序与互联网交互的基础。在给定的标题"访问网络,请求图片"中,我们可以聚焦于...在实际开发中,我们还需要关注网络请求的安全性、性能优化和错误处理等方面,以提供稳定且高效的网络服务。

    httpclient过时用的jar包

    10. **安全性**:使用过时的HttpClient版本可能会暴露你的应用程序于已知的安全漏洞。因此,及时更新到最新版本对于保持应用程序的安全至关重要。 总之,面对HttpClient的过时问题,应该及时采取行动,升级到最新...

    https发送post请求

    - **安全性问题**:绕过证书验证虽然简化了开发流程,但在生产环境中可能导致安全风险。建议使用有效的证书验证机制。 - **编码问题**:确保参数编码为UTF-8,以避免字符编码错误。 - **异常处理**:适当处理可能抛...

    使用httpclient无需证书调用https的示例(java调用https)

    在Java编程中,HTTPS(Hypertext Transfer Protocol Secure)是一种用于在Web上安全传输数据的协议,它通过SSL/TLS(Secure Sockets Layer / Transport Layer Security)提供加密通信以及服务器身份验证。...

    Android通过HttpClient访问服务器的servlet

    本篇将详细讲解如何使用HttpClient来访问服务器上的Servlet进行数据交换。 首先,为了在Android应用中发送HTTP请求,我们需要创建一个HttpClient对象。在这个例子中,我们使用了`DefaultHttpClient`,它是...

    (完整版)JAVA利用HttpClient进行POST请求(HTTPS).doc

    HTTPS协议需要SSL/TLS证书来确保数据的安全,而HttpClient需要忽略证书验证过程,以便与HTTPS服务器进行交互。 在本文中,我们将详细介绍如何使用JAVA的HttpClient库来发送POST请求,以便与HTTPS服务器进行交互。...

    android客户端发送https请求

    在Android开发中,为了保障数据传输的安全性,通常会使用HTTPS协议进行网络通信。HTTPS是HTTP(超文本传输协议)与SSL/TLS(安全套接层/传输层安全)的结合,它能提供身份验证、数据加密以及消息完整性检查,防止...

    解析页面链接

    ### 解析页面链接知识点 #### 一、使用Java与Jsoup进行页面链接解析 ##### 1. Jsoup简介 Jsoup 是一个用于处理实际世界 HTML 的 Java 库。它可以为 HTML 文档提供便利的 API 用于提取数据,即使 HTML 结构不完整...

    android应用访问服务器端

    DefaultHttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet("http://example.com"); HttpResponse response = httpclient.execute(httpget); StatusLine statusLine = response....

    Android Studio 实训操作题(三)WebView的用法及使用HTTP协议访问网络.docx

    WebView不仅支持加载本地HTML资源,还可以通过HTTP/HTTPS协议访问网络上的网页。本实训操作题将指导学生掌握WebView的基本使用以及如何利用HTTP协议访问网络。 1. **WebView的使用** - **初始化WebView**:在布局...

    轻松把玩HttpClient-032217531

    1. 绕过证书验证实现HTTPS: ```java SchemeRegistry schemeRegistry = new SchemeRegistry(); schemeRegistry.register(new Scheme("https", PlainSocketFactory.getSocketFactory(), 443)); ...

Global site tag (gtag.js) - Google Analytics