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上被使用的加密/解密协定。如果你在使用Sun的JVM,我们不提倡更改 这个值。据报道,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,添加这个元素。 合法的值是JKS和PKCS12
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了;
注意:生成keyStore的jdk和myEclipse的jdk要一致.否则可能出现错误;
分享到:
相关推荐
利用tomcat搭建支持ssl的服务,并由httpClient进行https访问。整个过程简单明了。 1.生成key. 2.配置tomcat支持ssl 3.利用一个简单例子用httpClient连接ssl
http远程接口调用-httpClient+跳过SSL证书校验. 里面分别有3个httpClient的工具类代码。 还有一个专门为了跳过SSL证书校验的工具类。
以上自己测试是可行的,直接拿过去导入即可,直接用main
主要介绍了.NET Core 使用HttpClient SSL请求出错的解决办法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
前言 HttpClient 的范围 什么是 HttpClient 不能做的 关于翻译 第一章 基础 执行请求 ... ...第二章 连接管理 ... HttpClient 代理配置 HTTP 连接管理器 连接操作器 管理连接和连接管理器
httplient向https发送请求会因为证书校验而报错,该工具类提供绕开HTTPS证书校验方法,以实现访问https网站的功能
单向身份验证(也称为单向tls,单向ssl):Https连接,客户端在其中验证对方的证书 两路认证(也称为两路tls,两路ssl,相互认证):客户端和对方验证证书的Https连接,也称为相互认证 有用的链接 一些历史 我主要...
Manticore 注意:虽然我将继续在此处维护库,但我已将规范副本... 它包括对以下内容的支持: 保持连接(和连接池) 透明的gzip和放气处理透明的cookie处理同步和异步执行模型懒惰评估验证代理支持SSL协议用法快速开始如
无需丑陋的字符串连接即可轻松添加路由参数 本机支持基本身份验证 每个请求的可定制标头 完全了解代理。 可定制的超时时间 支持 gzip 通过一套全面的开发人员测试实现良好的测试覆盖率,为库的质量提供保证 最小化...
69.[开源][安卓][网络安全]NetCipher...Proxied Connection Support:通过Apache HTTPClient库的特定配置来支持HTTP和HTTPS流量的HTTP和SOCKS代理连接; OrbotHelper:一个支持Orbot:Tor for Android应用集成的工具类。
在开发应用程序时,我们编写处理所有 HTTP 请求的 HTTP 连接类,创建在后台运行的线程,管理线程池,响应解析,响应缓存,处理错误代码,SSL 连接,并行运行请求等等那。 每个开发人员都有自己的实现这些功能的方式...
HTTP网络客户端请求基础工具类,可发送常见的GET、POST等请求方式,中文编码已处理,基于SSL连接,依赖的jar包有:commons-lang-2.6.jar、httpclient-4.3.2.jar、httpcore-4.3.1.jar、commons-io-2.4.jar
改库具体提供:1、StrongTrustManager:TLS/SSL证书校验的一个强大实现,任何认证中心都可以进行定制 2、Proxied Connection Support:通过Apache HTTPClient库的特定配置来支持HTTP和HTTPS流量的HTTP和SOCKS代理连接 ...
OKHTTP应运而生,它是Square的...OKHTTP实现了类似于iava.net.HttpURLConnection API的核心模块,另外okhttp-apache模块实现了Apache Httpclient API。 OKHTTP支持Android2.2及以上版本,对于JAVA,则需要JAVA1.5以上。
ftp4j提供多种方式连接到远程FTP服务器包括:通过 TCP/IP直接连接,通过FTP代理、HTTP代理、SOCKS4/4a代理和SOCKS5代理连接,通过SSL安全连接。 Java的命令行进度条 JCmdLineProgess JCmdLineProgess 是一个 Java ...
1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...
1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...
ftp4j提供多种方式连接到远程FTP服务器包括:通过 TCP/IP直接连接,通过FTP代理、HTTP代理、SOCKS4/4a代理和SOCKS5代理连接,通过SSL安全连接。 Java的命令行进度条 JCmdLineProgess JCmdLineProgess 是一个 Java ...