`
wxlgzxx_1988
  • 浏览: 69053 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

HttpClient连接SSL

阅读更多

1.生成keystore

打开cmd,输入(jdk环境变量当然是配置好的):

keytool -genkey -alias tomcat -keyalg RSA –validity 60  -keystore D:\tomcat.keystore

cmd输出:

输入keystore密码:******
再次输入新密码:******
您的名字与姓氏是什么?
  [Unknown]:  localhost
您的组织单位名称是什么?
  [Unknown]:  it
您的组织名称是什么?
  [Unknown]:  dev
您所在的城市或区域名称是什么?
  [Unknown]:  hz
您所在的州或省份名称是什么?
  [Unknown]:  zj
该单位的两字母国家代码是什么
  [Unknown]:  CN
CN=localhost, OU=it, O=dev, L=hz, ST=zj, C=CN
  [否]:  Y

输入<tomcat>的主密码
        (如果和 keystore 密码相同,按回车):
参数说明:

-genkey表示生成密钥 
-validity
指定证书有效期,这里是60 
-alias
指定别名,这里是tomcat
-keyalg
指定算法,这里是RSA 
-keystore
指定存储位置,这里是D:\ tomcat.keystore 

使用的自定义密码为 123456 

 

*其中 您的名字与姓氏是什么? localhost是网站的域名或者ip,根据实际情况填写。否者会出现证书上的名称无效;

 2.配置tomcat服务器支持SSL

将生成的 tomcat.keystore文件,放到%TOMCAT_HOME%/conf目录中(其他也OK).

说明: 修改%TOMCAT_HOME%/conf/server.xml,新增Connector(原注释里有):

Code:

<Connector  

              SSLEnabled="true"  

              URIEncoding="UTF-8"  

              clientAuth="false"  

              keystoreFile="conf/tomcat.keystore"  

              keystorePass="123456"  

              maxThreads="150"  

              port="8443"  

              protocol="HTTP/1.1"  

              scheme="https"  

              secure="true"  

               sslProtocol="TLS" />

 

这样你的tomcat就支持https访问了;

属性说明:

 port: 这个port属性(默认值是8443)TCP/IP端口数码,Tomcat在其上监听安全连接。你可以把它更改成任何你愿意要的数值(如默认的https通信,数目是443)。不过,在许多操作系统中,要想在比1024小的端口数码上运行Tomcat,需要特殊的设置(它超出了这个文档资料的范围)
redirectPort
: 如果你在这里更改端口数值,你还必须更改在non-SSL连接器上的redirectPort 这个属性特定的值。这允许Tomcat自动地redirect那些试图访问有安全限制页面的用户,指明根据 Servlet 2.4 Specification要求,SSL是必需的
clientAuth
: 如果你想要Tomcat要求所有的SSL客户在使用这个socket时出示用户认证书,把这个值设定为 true 。如果你想要Tomcat要求出示用户认证书,但是如果没有认证书也可以, 就把这个值设定为want
keystoreFile
: 如果你产生的keystore文件不在Tomcat期望的默认地方(一个叫做.keystore 的文件在Tomcat运行的主目录),就添加这个属性。你可以指定一个绝对路径名称, 或者一个由$CATALINA_BASE环境变量而派生的相对路径名称。
keystorePass
: 如果你使用一个不同的keystore(以及认证书)密码,而不是Tomcat期望的密码 (就是changeit),添加这个元素。
keystoreType
: 如果使用一个PKCS12 keystore的话,就添加这个element。 有效的值是JKS PKCS12
sslProtocol
: 要在这个socket上被使用的加密/解密协定。如果你在使用SunJVM,我们不提倡更改 这个值。据报道,TLS协定的IBM's 1.4.1 实现与一些通用的浏览器不兼容。 如果是这样,就使用value SSL
 
ciphers
: 这个socket允许使用的由逗号分隔开的加密密码列单。默认的情况下,任何可用的密码都允许被使用。
algorithm
: 可用的X509算法。默认是Sun的实现( SunX509 )。 对于IBM JVMs,你应该使用值 IbmX509。对于其他卖主,查阅JVM文档资料来 找正确的值。
truststoreFile
: 用来验证用户认证书的TrustStore文件。
truststorePass
: 访问TrustStore的密码。默认值就是keystorePass的值。
truststoreType
: 如果你在使用与KeyStore不同格式的TrustStore,添加这个元素。 合法的值是JKSPKCS12
keyAlias
: 如果 keystore 里面有多个 key,你可以为用这个选项为加入的 key 起一个名字。 如果没有指定名字,使用时 keystore 内的第一个 key 将会被使用

3.用浏览器访问应用

输入:https://localhost:8484/Struts2/

你会发现你的应用已经处于SLL安全通道中了.

4.用httpclient访问https

Code:

/**
 * 
 */
package com.wxl.http;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.KeyStore;
import java.security.cert.CertificateException;

import org.apache.http.HttpEntity;
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;
import org.apache.http.util.EntityUtils;

/**
 * @author wangxl
 * 
 */
public class HttpClientSSLTest {
	private static String url = "https://localhost:8484/Struts2/Ajax/serivceJ.action";
	private static String keyStorePath = "d:\\tomcat.keystore";
	private static String keyStorePassWord = "888888";
	private static int port = 8484;

	/**
	 * @param args
	 * @throws IOException
	 * @throws CertificateException
	 */
	public static void main(String[] args) {
		// 创建默认的httpClient实例
		HttpClient client = new DefaultHttpClient();
		FileInputStream instream = null;
		try {
			KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
			instream = new FileInputStream(new File(keyStorePath));
			// 加载keyStore d:\\tomcat.keystore
			keyStore.load(instream, keyStorePassWord.toCharArray());
			// 创建Socket工厂,将keyStore注入
			SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore);
			// 创建Scheme
			Scheme sch = new Scheme("https", port, socketFactory);
			// 注册Scheme
			client.getConnectionManager().getSchemeRegistry().register(sch);
			// 创建http请求(get方式)
			HttpGet getMethod = new HttpGet(url);
			System.out.println("----------------------------------------");
			System.out.println("Executing request:"
					+ getMethod.getRequestLine());
			HttpResponse response = client.execute(getMethod);
			HttpEntity entity = response.getEntity();
			System.out.println("----------------------------------------");
			System.out.println("Response header:" + response.getStatusLine());
			if (entity != null) {
				System.out.println("Response content length: "
						+ entity.getContentLength());
				System.out.println("Response content:"
						+ EntityUtils.toString(entity));
				System.out.println("----------------------------------------");
				EntityUtils.consume(entity);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				instream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			// 释放连接
			client.getConnectionManager().shutdown();
		}

	}
}

  

 

 

服务器端的action

/**
 * 
 */
package com.wxl.action;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

/**
 * @author wangxl
 * 
 */
public class TestAction extends ActionSupport {

	public void serivceJ() throws Exception {
		try {
			HttpServletResponse response = ServletActionContext.getResponse();
			HttpServletRequest request = ServletActionContext.getRequest();
			response.setCharacterEncoding("UTF-8");
			String type = request.getParameter("type");
			String c = "none";
			if (type != null && !"".equals(type)) {
				if (type.equalsIgnoreCase("car")) {
					c = "Hello:给你一辆宝马";
				} else if (type.equalsIgnoreCase("house")) {
					c = "Hello:给你一栋别墅";
				}
			}
			response.getWriter().write(c);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

  

 

 

运行结果:

 

----------------------------------------
Executing request:GET https://localhost:8484/Struts2/Ajax/serivceJ.action HTTP/1.1
----------------------------------------
Response header:HTTP/1.1 200 OK
Response content length: 4
Response content:none
----------------------------------------

 

 

到此,一个完整的httpClient 访问https的流程就走OK了;

 

注意:生成keyStorejdkmyEclipsejdk要一致.否则可能出现错误;

分享到:
评论

相关推荐

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

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

    http远程接口调用-httpClient+跳过SSL证书校验

    对于HTTPS连接,通常会进行SSL证书校验,确保服务器的身份。但在开发环境中,我们可能遇到自签名证书或未信任的证书,这时可以禁用SSL校验。以下是如何创建一个跳过SSL证书校验的HttpClient: ```java // 创建...

    httpClient4.1入门教程.

    6. HttpClient 连接 SSL:在处理 HTTPS 请求时,需要配置 SSL 相关设置。 1) 生成 KeyStore:使用 `keytool` 命令创建 KeyStore 文件,存储服务器的证书。 2) 配置 tomcat 服务器支持 SSL:在 Tomcat 配置文件 `...

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

    通常,当一个应用程序尝试连接到HTTPS网站时,会进行一系列的SSL握手过程,验证服务器的身份并建立安全连接。但有时在测试或特定场景下,我们可能需要绕过这一验证,例如自签名证书的服务器或开发环境。 HTTPClient...

    httpClient4.1入门教程.docx

    6. **HttpClient 连接 SSL**:配置 SSL 需要生成 KeyStore,配置 Tomcat 服务器支持 SSL,然后在 HttpClient 中设置 SSLContext 和 SchemeRegistry。 通过上述步骤,开发者可以快速上手使用 HttpClient 实现各种 ...

    httpClient4 教程

    #### HttpClient 连接 SSL 对于 HTTPS 请求,需要配置 SSL 上下文: 1. **生成 KeyStore**:使用 `keytool` 工具生成 KeyStore 文件。 2. **配置 Tomcat 服务器支持 SSL**:在 Tomcat 配置文件 `server.xml` 中...

    superfly-httpclient-ssl-1.3-7.zip

    这个项目可能提供了处理HTTPS连接和SSL/TLS加密功能的扩展或库。HTTP客户端通常用于程序间的数据交换,而SSL(Secure Socket Layer)或其更新版本TLS(Transport Layer Security)是用于在互联网上建立安全通信链接...

    httpClient4.1入门教程

    **HttpClient连接SSL**: 为了支持HTTPS,你需要配置HttpClient以信任指定的证书。首先,你需要生成一个KeyStore,然后配置HttpClient使用这个KeyStore。在Tomcat服务器上配置SSL支持后,HttpClient就可以通过`...

    HttpClient使用教程

    6. HttpClient 连接 SSL: - 生成 KeyStore:使用 keytool 工具创建 KeyStore 文件,存储服务器证书。 - 配置 tomcat 服务器支持 SSL:修改 tomcat 的 server.xml 文件,配置 SSL Connector,并指定 KeyStore 的...

    httpclient4.1访问https的配置方法

    在HttpClient中,我们需要创建一个`SSLContext`实例,并使用`SSLSocketFactory`来配置连接管理器。以下是一个简单的示例: ```java // 导入必要的库 import org.apache....

    通过HTTPClient访问启用SSL的Quickr REST API

    首先,`EasySSLProtocolSocketFactory.java`是一个自定义的Socket工厂类,用于创建支持SSL连接的HttpClient。这个类通常用于放宽SSL验证策略,因为默认的Java SSL配置可能会对某些不完全符合标准的自签名证书或过期...

    详解.NET Core 使用HttpClient SSL请求出错的解决办法

    在建立连接之前,HttpClient会检查目标服务器的SSL证书的有效性。如果证书不是由受信任的CA签发的,或者证书链无法构建到受信任的根CA,就会出现证书验证错误。 解决这种错误有几种方法。第一种方法是直接在...

    HTTPClient_delphi_delphi7_ssl_

    5. HTTPClient.conf - 另一个配置文件,可能存储了SSL证书、密钥和其他连接参数。 6. history.dat - 可能是保存用户历史记录或会话状态的文件。 7. frmLogin.dcu - 这是一个编译后的单元文件,可能包含了登录界面的...

    httpclient ssl 相关问题解决资料

    这样,HttpClient就会使用我们配置过的`SSLSocketFactory`来处理HTTPS连接,从而接受所有服务器的证书,不论其是否被权威机构认证。 这种方法在测试环境中非常有用,因为它允许HttpClient与未安装正式证书的服务器...

    HttpCient连接池Demo

    HttpClient连接池是网络编程中一个重要的优化手段,它允许我们重用已经建立的HTTP连接,减少每次请求时的建立和关闭连接的开销,从而提高应用程序的性能和效率。Apache HttpClient库提供了这样的功能,让我们能够...

    httpclient 绕开HTTPS证书校验

    `httpcore-4.2.4.jar`则是`httpclient`的基础库,提供了HTTP协议的核心组件,如连接管理、请求和响应模型等。 为了绕过HTTPS证书校验,我们需要自定义`SSLContext`和`TrustManager`。`SSLContext`是SSL/TLS安全套接...

    JAVA利用HttpClient进行HTTPS接口调用

    此外,还需要创建一个SSLConnectionSocketFactory,它是HttpClient中的关键组件,负责建立安全的SSL/TLS连接。 接下来,`HttpClientUtil.java`文件可能是实现HttpClient工具类,提供一个静态方法来创建和初始化...

    httpClient4.1入门教程.pdf

    文档还介绍了如何让HttpClient连接到SSL安全的服务器,这涉及到生成密钥库和配置服务器支持SSL连接的具体操作。 最后,文档还演示了如何使用HttpClient访问HTTPS协议的站点,包括生成KeyStore以及配置Tomcat服务器...

    HttpClient

    - **安全套接层(SSL)**:HttpClient支持SSL/TLS,可以对安全连接进行定制,包括安全套接层的配置和主机名验证。 - **连接持久化和路由**:连接持久化可以提高网络通信的效率,而连接路由则可以控制请求被路由到...

Global site tag (gtag.js) - Google Analytics