绕过证书校验https协议URL

原创 2013年12月04日 19:52:34
校验Http协议URL 并获取内容:   HttpClient 测试url连通 取得content  

在项目中遇到需要校验https协议的url报出SSL异常问题。先前写过一片校验http协议的文章不适合校验非信任域证书的https的URL,会报SSL异常,原因是程序里加载远程应用的证书。其实我们可以绕过证书只校验URL。

根据别人的代码做了一下修改,代码如下:


package com.williamwu.service;

import java.net.SocketTimeoutException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;

@SuppressWarnings("deprecation")
public class ConnectUtils {
	/**
	 * 自定义私有类:绕开HTTPS证书校验
	 */
	private static class EasyTrustManager implements X509TrustManager {
		public X509Certificate[] getAcceptedIssuers() {
			return null;
		}                                                                                                                                                                                                                                                                                   

		public void checkClientTrusted(X509Certificate[] certs, String authType) {
		}

		public void checkServerTrusted(X509Certificate[] certs, String authType) {
		}
	}
	
	public static int isSSLConnected(String httpUrl) throws SocketTimeoutException, Exception {
		int statusCode = 0;
		
		HttpClient hc = new DefaultHttpClient();
		// 连接超时设为6秒
		hc.getParams().setIntParameter("http.connection.timeout", 6000);
		// 连接成功后等待返回的超时设为8秒
		hc.getParams().setIntParameter("http.socket.timeout", 8000);		
		
		HttpGet httpGet = new HttpGet(httpUrl);
		
		try 
		{
			// HTTPS应绕开证书验证
			SSLContext context = SSLContext.getInstance("TLS");
			context.init(null, new TrustManager[] { new EasyTrustManager() },
					null);
			SSLSocketFactory factory = new SSLSocketFactory(context,
					SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
			Scheme https = new Scheme("https", 443, factory);
			hc.getConnectionManager().getSchemeRegistry().register(https);

			HttpResponse response = hc.execute(httpGet);
			statusCode = response.getStatusLine().getStatusCode();
		} catch (Exception e) {
			httpGet.abort();
			throw e;
		} finally {
			hc.getConnectionManager().shutdown();
		}
		return statusCode;
	}
}


相关文章推荐

我的总结之nginx https的配置 自己生成ssl证书 curl命令总结 https工作原理 find命令 PolarSSL http协议总结 json url nginx_lua

鉴于公司的业务需要需要,我需要对nginx的ssl模块研究一下,顺便记录一下研究过程。 首先需要将ssl模块配置跑通(前提是要已经with了该模块,可用/data/nginx/sbin/nginx -...

java https url访问 通过公钥证书防止域名劫持

通过浏览器获取url对应服务器的公钥证书server.cer, 访问这个url时加载这个公钥证书,来防止域名劫持。 采用配置hosts的方式来指定域名ip,从而模拟域名劫持。 文中介绍的生成h...
  • brouth
  • brouth
  • 2016年06月02日 16:34
  • 1000

Java 通过HttpClient 带证书方式请求Https协议网站 (Post方式带xml文档,Get以及Delete方式)

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...

利用jdk自带keytool生成ssl证书,搭建tomcat+https协议

一、 什么是HTTPS 在说HTTPS之前先说说什么是HTTP,HTTP就是我们平时浏览网页时候使用的一种协议。HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常...

HTTPS协议之SSL证书

HTTPS协议之SSL证书

【下载https协议需要的cer证书】

一:https简介 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全...

读取URL页面中的内容,支持HTTP和HTTPS协议

package com.test; import java.io.BufferedReader; import java.io.InputStreamReader; import jav...
  • ssergsw
  • ssergsw
  • 2013年06月16日 08:14
  • 12225

关于httpclient 请求https (如何绕过证书验证)

第一种方法,适用于httpclient4.X 里边有get和post两种方法供你发送请求使用。导入证书发送请求的在这里就不说了,网上到处都是 import java.io.BufferedR...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:绕过证书校验https协议URL
举报原因:
原因补充:

(最多只允许输入30个字)