ice world
There is nothing too difficult if you put your heart into it.
posts - 104, comments - 103, trackbacks - 0, articles - 0
导航
BlogJava
首页
新随笔
联系
聚合
管理
<
2012年6月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(8)
给我留言
查看公开留言
查看私人留言
随笔分类
ArcGIS(2)
CSS(4)
Database(14)
eclipse(10)
Hibernate(1)
Java(30)
Javascript(6)
Others(15)
Strut1(3)
Tomcat(7)
Weblogic(1)
Windows(13)
加解密(5)
随笔档案
2016年8月 (1)
2016年1月 (1)
2014年3月 (1)
2014年1月 (3)
2013年11月 (1)
2013年9月 (1)
2013年8月 (1)
2013年7月 (2)
2013年6月 (1)
2013年3月 (1)
2013年2月 (4)
2013年1月 (1)
2012年9月 (1)
2012年7月 (2)
2012年6月 (3)
2012年5月 (8)
2012年4月 (1)
2011年11月 (1)
2011年10月 (1)
2011年9月 (1)
2011年8月 (1)
2011年6月 (2)
2011年5月 (3)
2011年4月 (61)
2007年12月 (1)
搜索
最新评论
1. re: Failed to load JavaHL Library解决方法
啧啧,一语中的。
--Jerry Zhang
2. re: Error 1935的解决方法
我安装上面的方法成功了,各位同学们,千万别忘记修改注册表后重启电脑:)
--mentoruser
3. re: CXF+Spring+Tomcat简明示例
评论内容较长,点击标题查看
--无异
4. re: CXF+Spring+Tomcat简明示例
评论内容较长,点击标题查看
--chiangpan
5. re: Failed to load JavaHL Library解决方法[未登录]
顶顶顶
--小明
阅读排行榜
1. Failed to load JavaHL Library解决方法(78894)
2. CXF+Spring+Tomcat简明示例(51131)
3. java RSA加密解密(42668)
4. Java Tomcat SSL 服务端/客户端双向认证(一)(32885)
5. Java DES文件加密解密 javax.crypto.BadPaddingException: Given final block not properly padded(30878)
评论排行榜
1. CXF+Spring+Tomcat简明示例(27)
2. Java Tomcat SSL 服务端/客户端双向认证(一)(22)
3. Java数字证书对文件/加密/解密/签名/校验签名(8)
4. java RSA加密解密(7)
5. Failed to load JavaHL Library解决方法(6)
Java Tomcat SSL 服务端/客户端双向认证のApache HttpClient(二)
Posted on 2012-06-05 09:32
IceWee
阅读(5211)
评论(1)
编辑
收藏
所属分类:
Java
、
Tomcat
本演示例程是继
Java Tomcat SSL 服务端/客户端双向认证(一)
,密钥库可证书的生成脚本不再重复黏贴,仅仅是用程序来代替浏览器访问服务端。
例程中使用到了Apache HttpClient库,版本为4.1.3
全部依赖库:
commons-logging-1.1.1.jar
httpclient-4.1.3.jar
httpcore-4.1.4.jar
httpmime-4.1.3.jar(上传文件使用)
在(一)中的程序包中创建一个客户端类:HttpsClient
HttpsClient.java
package
com.icesoft.client;
import
java.io.BufferedReader;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.InputStream;
import
java.io.InputStreamReader;
import
java.security.KeyStore;
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;
public
class
HttpsClient
{
private
static
final
String KEY_STORE_TYPE_JKS
=
"
jks
"
;
private
static
final
String KEY_STORE_TYPE_P12
=
"
PKCS12
"
;
private
static
final
String SCHEME_HTTPS
=
"
https
"
;
private
static
final
int
HTTPS_PORT
=
8443
;
private
static
final
String HTTPS_URL
=
"
https://127.0.0.1:8443/HttpClientSSL/sslServlet
"
;
private
static
final
String KEY_STORE_CLIENT_PATH
=
"
E:/ssl/client.p12
"
;
private
static
final
String KEY_STORE_TRUST_PATH
=
"
E:/ssl/client.truststore
"
;
private
static
final
String KEY_STORE_PASSWORD
=
"
123456
"
;
private
static
final
String KEY_STORE_TRUST_PASSWORD
=
"
123456
"
;
public
static
void
main(String[] args)
throws
Exception
{
ssl();
}
private
static
void
ssl()
throws
Exception
{
HttpClient httpClient
=
new
DefaultHttpClient();
try
{
KeyStore keyStore
=
KeyStore.getInstance(KEY_STORE_TYPE_P12);
KeyStore trustStore
=
KeyStore.getInstance(KEY_STORE_TYPE_JKS);
InputStream ksIn
=
new
FileInputStream(KEY_STORE_CLIENT_PATH);
InputStream tsIn
=
new
FileInputStream(
new
File(KEY_STORE_TRUST_PATH));
try
{
keyStore.load(ksIn, KEY_STORE_PASSWORD.toCharArray());
trustStore.load(tsIn, KEY_STORE_TRUST_PASSWORD.toCharArray());
}
finally
{
try
{ ksIn.close(); }
catch
(Exception ignore)
{}
try
{ tsIn.close(); }
catch
(Exception ignore)
{}
}
SSLSocketFactory socketFactory
=
new
SSLSocketFactory(keyStore, KEY_STORE_PASSWORD, trustStore);
Scheme sch
=
new
Scheme(SCHEME_HTTPS, HTTPS_PORT, socketFactory);
httpClient.getConnectionManager().getSchemeRegistry().register(sch);
HttpGet httpget
=
new
HttpGet(HTTPS_URL);
System.out.println(
"
executing request
"
+
httpget.getRequestLine());
HttpResponse response
=
httpClient.execute(httpget);
HttpEntity entity
=
response.getEntity();
System.out.println(
"
----------------------------------------
"
);
System.out.println(response.getStatusLine());
if
(entity
!=
null
)
{
System.out.println(
"
Response content length:
"
+
entity.getContentLength());
BufferedReader bufferedReader
=
new
BufferedReader(
new
InputStreamReader(entity.getContent()));
String text;
while
((text
=
bufferedReader.readLine())
!=
null
)
{
System.out.println(text);
}
bufferedReader.close();
}
EntityUtils.consume(entity);
}
finally
{
httpClient.getConnectionManager().shutdown();
}
}
}
启动Tomcat,运行HttpsClient,控制台返回:
OK,和使用浏览器访问得到的结果一模一样!
全文完!
Feedback
#
re: Java Tomcat SSL 服务端/客户端双向认证のApache HttpClient(二)
回复
更多评论
2013-05-14 10:01 by
zhyg
为什么我的一直是“这是一个HTTPS请求,但是没有可用的客户端证书”?
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
Java日常随意记
FTPClient上传文件蜗牛速度的解决方法
HttpClientUtils
Java获取本机IP列表
Exception loading sessions from persistent storage
Java Tomcat SSL 服务端/客户端双向认证のApache HttpClient(二)
Java Tomcat SSL 服务端/客户端双向认证(一)
Java MD5校验工具类
ExceptionUtil 获取异常堆栈内容
Java Zip Utils 压缩/解压缩工具包
Powered by:
BlogJava
Copyright © IceWee