`
bewithme
  • 浏览: 431580 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

httpclient使用NTLM协与https协议访问双向认证站点

阅读更多

 

  上篇中提到了在NTLM协议中使用HTTPS协议访问需要双向认证的问题,这里会给出方案和相应代码。

 

 

public static String getWithNTCredentialAndSSLClientAuth(String url,boolean needProxy,int msTimeOut) throws MalformedURLException{
		log.info("--get url:[" + url + "]");
		String responseBody = null;
		HttpMethod getMethod = new GetMethod(url);
		if(msTimeOut>0) {
			getMethod.getParams().setSoTimeout(msTimeOut);
		}
		log.info("--queryString:" + getMethod.getQueryString());
		Protocol authhttps = new Protocol("https",new AuthSSLProtocolSocketFactory(), 443); 
        Protocol.registerProtocol("https",authhttps);
		HttpClient httpClient = new HttpClient();
		if (needProxy) {
			String proxyUrl = "xxx.xxx.xxx.xxx";
			String proxyPort ="8080";
			String proxyUser ="xxxxxx";
			String proxyPassword ="xxxxx";
			String domain="xxxxx.COM";
			httpClient.getHostConfiguration().setProxy(proxyUrl,Integer.parseInt(proxyPort));
			List authPrefs = new ArrayList(2);
			authPrefs.add(AuthPolicy.NTLM);
			httpClient.getParams().setParameter(HttpMethodParams.USER_AGENT,"Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1"); 
			httpClient.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs);
			// 如果代理需要密码验证,这里设置用户名密码
			NTCredentials ntc=new NTCredentials(proxyUser, proxyPassword,proxyUrl,domain);
			httpClient.getState().setProxyCredentials(AuthScope.ANY,ntc);
		}
		try {
			int statusCode = httpClient.executeMethod(getMethod);
			log.info("http get url:" + getMethod.getURI());
			log.info("----http status code:" + statusCode);
			if (statusCode == HttpStatus.SC_OK || statusCode==HttpStatus.SC_PARTIAL_CONTENT) {
				responseBody = getMethod.getResponseBodyAsString();
			}
		} catch (HttpException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			getMethod.releaseConnection();
		}
		return responseBody;
	}

 

   关键代码

	Protocol authhttps = new Protocol("https",new AuthSSLProtocolSocketFactory(), 443); 
        Protocol.registerProtocol("https",authhttps);

  此处代码指定使用https协议,而此协议的创建需要传入

AuthSSLProtocolSocketFactory

 这是SSL协议认证工厂实例,这个实例主要提供 SSLContext 即SSL上下文,示例代码中,该上下文由SSLTool类提供,而 SSLContext的创建需要服务器端证书,客户端证书,客户端证书。示例代码中,我们把配置我们存放在/configs/tenpay.properties文件中。

server_cert_file_name=D:/sslfile/xxxx.pem   服务器端证书文件路径
client_cert_file_name=D:/sslfile/xxxx.pfx   客户端证书文件路径 
client_cert_password=xxxxx客户端证书密码 

 

代码中,测试方法在src\com\apache\test\https\HttpClientUtil.java  中

有问题可加QQ 359709421

 

如果您觉得我的文章给了您帮助,请为我买一杯饮料吧!以下是我的支付宝,意思一下我将非常感激!
分享到:
评论
1 楼 wilddonkey 2014-08-09  
好文章,说的很详细。

相关推荐

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

    在实际项目中,我们经常需要使用HttpClient来发送POST请求,以便与服务器进行数据交换。但是,当我们需要使用HTTPS协议时,事情变得复杂起来。HTTPS协议需要SSL/TLS证书来确保数据的安全,而HttpClient需要忽略证书...

    httpclient来进行https访问

    ### 标题与描述解析:使用`httpclient`进行`https`访问 #### 1. `httpclient`简介 `httpclient`是Apache HttpClient的一个Java实现,它提供了一种高效、灵活的方式来处理HTTP请求。通过`httpclient`,开发者能够...

    使用httpClient访问https+443端口号。

    标题中的“使用httpClient访问https+443端口号”指的是使用Apache HttpClient库来发起HTTPS(安全超文本传输协议)请求,目标服务器的默认端口是443。HTTPS是一种基于SSL/TLS的安全通信协议,用于在客户端和服务器...

    httpclient4.5 绕过ssl认证文件访问

    在IT行业中,网络通信是至关重要的,特别是在进行Web服务交互时...通过学习上述内容,你将能够使用HTTPClient 4.5成功访问那些需要绕过SSL认证的HTTPS网站。在实际项目中,一定要谨慎处理这种情况,确保数据的安全性。

    httpClient实例httpClient调用 http/https实例 忽略SSL验证

    这个实例主要涉及如何配置HttpClient来忽略SSL(Secure Socket Layer)验证,这对于在开发和测试环境中处理自签名证书或未认证的服务器非常有用。以下将详细介绍HttpClient的使用以及如何进行SSL验证的忽略。 首先...

    HttpClient4.5 实现https忽略SSL证书验证

    使用HttpClient4.5实现https请求忽略SSL证书验证工具类

    httpclient访问需要客户端认证数字证书的https接口的处理方法

    总结来说,处理需要客户端认证的HTTPS接口需要理解SSL/TLS协议、HttpClient的内部工作原理以及如何自定义安全配置。通过`InstallCert.java`和`HTTPSSecureProtocolSocketFactory.java`这两个文件,我们可以实现这个...

    JAVA利用HttpClient进行HTTPS接口调用

    3. 使用HttpClientUtil创建的HttpClient实例执行请求,如`CloseableHttpResponse response = httpClient.execute(request);` 4. 检查响应状态码,例如,200表示成功,其他代码可能表示错误。 5. 读取响应内容,如果...

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

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

    android访问自签CA的Https SSL双向认证(j2SE也能使用)

    通过以上步骤,我们就可以成功地在Android应用中访问使用自签CA的HTTPS服务,并实现SSL双向认证。在实际开发中,需要注意安全性和隐私问题,确保只在必要的情况下使用自签证书,避免在生产环境中使用,因为这可能...

    https请求封装类 双向认证

    https请求封装类 双向认证 httpclient

    httpClient使用指南最新版

    ### HttpClient 使用指南知识点详解 #### 一、概述与基本概念 **1.1 请求执行** - **1.1.1 HTTP请求**: 在客户端发起HTTP请求时,需要构造一个`HttpRequest`对象,它包含了请求方法(如GET、POST)、请求URL等...

    HttpClient配置SSL绕过https证书实例

    HttpClient配置SSL绕过https证书实例,附件中包含所需httpclient组件jar库。博客地址:http://blog.csdn.net/irokay/article/details/78801307。

    httpclient4.5发送https请求(验证证书)

    不会的可以在评论区留言哈,这是我自己做项目用到的。所以绝对可用!同时共享出来给到大家

    使用httpclient访问servlet

    本篇文章将详细探讨如何使用HttpClient来访问Servlet,并阐述相关的核心知识点。 首先,我们需要理解Servlet的本质。Servlet是一种Java类,它扩展了服务器的功能,用于处理HTTP请求并生成响应。通常,Servlet部署在...

    httpclient

    在标题"HTTPClient"和描述"HTTPclient实现HTTPS双向认证"中,涉及到的关键知识点是HTTPClient库在处理HTTPS安全连接时的双向认证机制。这里我们将深入探讨这个主题。 首先,了解HTTPS协议的基本概念是必要的。HTTPS...

    基于HttpClient 4.3的可访问自签名HTTPS站点的新版工具类

    另外在项目中正好需要访问https协议的接口,而对应的服务器没有购买商业CA颁发的正式受信证书,只是做了个自签名(联想一下12306网站购票时提示的那个警告信息),默认情况下通过HttpClient访问会抛出异常。...

    Commons-HTTPClient组件介绍与使用

    HttpClient支持HTTP协议的最新版本,包括HTTP 1.0和1.1,以及一些高级特性,如HTTPS加密、HTTP代理、多种认证机制(Basic、Digest和NTLM)、多部分表单上传、持久连接等。 HttpClient的主要功能包括: 1. 实现了...

Global site tag (gtag.js) - Google Analytics