- 浏览: 1476351 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (523)
- JAVA (334)
- J2EE (18)
- JSP (21)
- JavaScript (14)
- it life (2)
- mobile develop (4)
- UBUNTU (14)
- Algorithm (14)
- DataBase (56)
- Browser/Server (1)
- linux (6)
- fedora (2)
- CSS (1)
- AjAX (3)
- HTML5 (1)
- EJB (1)
- osworkflow (2)
- Java face (5)
- spring (4)
- ICE (1)
- webService (2)
- MongoDB (1)
- JavaThread (4)
- JavaCollections (3)
- Hibernate (2)
- JavaMail (1)
- JavaBasic (1)
- Cache (1)
- https (4)
- DOM4J (1)
- JDOM (0)
- Mybatis (1)
- JUNIT (1)
- eclipse (1)
- easyMock (2)
最新评论
-
yadongliang:
...
自己认为的一些技术点 -
yadongliang:
每次看你头像都看的荷尔蒙分泌失调
WebService的两种方式SOAP和REST比较 (转) -
yadongliang:
hollo 写道一直有这种感觉,盲目的跟风,确实有一些人为了潮 ...
WebService的两种方式SOAP和REST比较 (转) -
welss:
博主,JNative怎么调用dll中的这种方法: int ...
JNative调用DLL -
Java_Antelope:
session.setAttribute和session.getAttribute(
https一般来说有单项SSL和双向SSL连接之分。
单项SSL连接,也就是只是客户端验证服务器证书。tomcat中clientAuth="false"的时候,HTTPS单向验证如下:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import java.util.Date;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class ClientSendData {
static Log log = LogFactory.getLog(ClientSendData.class);
// 客户端信任的证书
private String sslTrustStore;
private String sslTrustStorePassword;
private String Url;
//初始化数据
public ClientSendData() {
sslTrustStore = "D:/ssl/clientTrust.jks";
sslTrustStorePassword = "123456";
Url = "https://test.yihaodian.com:8443/ims/feedbackToPingAn_getData.action";
}
public String sendData(String data) {
String receivedData = null;
try {
//设置系统参数
System.setProperty("javax.net.ssl.trustStore", sslTrustStore);
System.setProperty("javax.net.ssl.trustStorePassword",
sslTrustStorePassword);
receivedData = send(Url, data);
} catch (Exception e) {
e.printStackTrace();
}
return receivedData;
}
public static String send(String sendurl, String sendData)
throws Exception {
URL url = new URL(sendurl);
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
};
System.setProperty("java.protocol.handler.pkgs","sun.net.www.protocol");
HttpsURLConnection.setDefaultHostnameVerifier(hv);
Date current = new Date(System.currentTimeMillis());
log.info("begint to open connection at " + current);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
Date end = new Date(System.currentTimeMillis());
log.info("open connection ok at " + end + ",cost:"+ (end.getTime() - current.getTime()));
connection.setRequestProperty("Content-Type", "text/xml");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setReadTimeout(30000);
byte data[] = sendData.getBytes();
current = new Date(System.currentTimeMillis());
log.info("[SSLIX]notifyEai,begint to write data at " + current);
OutputStream out = connection.getOutputStream();
out.write(data);
end = new Date(System.currentTimeMillis());
log.info("write data ok at " + end + ",cost:"
+ (end.getTime() - current.getTime()));
StringBuffer receivedData = new StringBuffer();
current = new Date(System.currentTimeMillis());
log.info("begint to read data at " + current);
InputStreamReader inReader = new InputStreamReader(connection
.getInputStream(), "UTF-8");
BufferedReader aReader = new BufferedReader(inReader);
String aLine;
while ((aLine = aReader.readLine()) != null) {
receivedData.append(aLine);
}
end = new Date(System.currentTimeMillis());
log.info("read data ok at " + end + ",cost:"
+ (end.getTime() - current.getTime()));
log.info("开始返回状态码");
Integer statusCode = connection.getResponseCode();
log.info("返回状态码:" + statusCode);
aReader.close();
connection.disconnect();
return receivedData.toString();
}
public static void main(String[] args) {
ClientSendData t = new ClientSendData();
t.sendData("测试SSL单项连接,向服务端发送数据!");
}
}
单项认证时,只需要设置客户端信任的证书库就行。但是当是双向认证时,还需要设置客户端密钥库密码。
HTTPS双向验证代码如下:
public class ClientSendData {
static Log log = LogFactory.getLog(EaiChannel.class);
//客户端密钥库
private String sslKeyStorePath;
private String sslKeyStorePassword;
private String sslKeyStoreType;
// 客户端信任的证书
private String sslTrustStore;
private String sslTrustStorePassword;
private String eaiUrl;
//初始化数据
public ClientSendData() {
sslKeyStorePath = "D:/ssl/clientKeys.jks";
sslKeyStorePassword = "123456";
sslKeyStoreType = "JKS"; //密钥库类型,有JKS PKCS12等
sslTrustStore = "D:/ssl/clientTrust.jks";
sslTrustStorePassword = "123456";
eaiUrl = "https://test.yihaodian.com:8443/ims/feedbackToPingAn_getData.action";
}
public String sendData(String data) {
String receivedData = null;
try {
System.setProperty("javax.net.ssl.keyStore", sslKeyStorePath);
System.setProperty("javax.net.ssl.keyStorePassword",sslKeyStorePassword);
System.setProperty("javax.net.ssl.keyStoreType", sslKeyStoreType);
//设置系统参数
System.setProperty("javax.net.ssl.trustStore", sslTrustStore);
System.setProperty("javax.net.ssl.trustStorePassword",
sslTrustStorePassword);
receivedData = send(eaiUrl, data);
} catch (Exception e) {
e.printStackTrace();
}
return receivedData;
}
public static String send(String sendurl, String sendData)
throws Exception {
//和上面一样
}
public static void main(String[] args) {
ClientSendData t = new ClientSendData();
t.sendData("测试SSL双项连接,向服务端发送数据!");
}
}
下面来说说可能会遇到的异常:
1. java.security.NoSuchAlgorithmException
一般来说是密钥库类型不对,如上面的sslKeyStoreType = "JKS" 却写成PKCS12。
也有可能是证书的问题。
2. java.net.UnknownHostException
服务端地址不对。
3.java.net.SocketException: Unexpected end of file from server
这个异常和客户端没有关系,说明已经发送成功。是服务端的问题。有可能是防火墙的原因,也可能是服务端没处理客户端的响应。
另外有人说当URL过长时也会发生此错误,当使用URL发送数据时,可以参考此意见。
4.java.io.IOException:server returned HTTP response code :500
这个异常是服务端代码的问题。服务端相应代码执行时抛出了异常。
最后 如果返回的状态码是200 ,表示成功。
单项SSL连接,也就是只是客户端验证服务器证书。tomcat中clientAuth="false"的时候,HTTPS单向验证如下:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import java.util.Date;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class ClientSendData {
static Log log = LogFactory.getLog(ClientSendData.class);
// 客户端信任的证书
private String sslTrustStore;
private String sslTrustStorePassword;
private String Url;
//初始化数据
public ClientSendData() {
sslTrustStore = "D:/ssl/clientTrust.jks";
sslTrustStorePassword = "123456";
Url = "https://test.yihaodian.com:8443/ims/feedbackToPingAn_getData.action";
}
public String sendData(String data) {
String receivedData = null;
try {
//设置系统参数
System.setProperty("javax.net.ssl.trustStore", sslTrustStore);
System.setProperty("javax.net.ssl.trustStorePassword",
sslTrustStorePassword);
receivedData = send(Url, data);
} catch (Exception e) {
e.printStackTrace();
}
return receivedData;
}
public static String send(String sendurl, String sendData)
throws Exception {
URL url = new URL(sendurl);
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
};
System.setProperty("java.protocol.handler.pkgs","sun.net.www.protocol");
HttpsURLConnection.setDefaultHostnameVerifier(hv);
Date current = new Date(System.currentTimeMillis());
log.info("begint to open connection at " + current);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
Date end = new Date(System.currentTimeMillis());
log.info("open connection ok at " + end + ",cost:"+ (end.getTime() - current.getTime()));
connection.setRequestProperty("Content-Type", "text/xml");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setReadTimeout(30000);
byte data[] = sendData.getBytes();
current = new Date(System.currentTimeMillis());
log.info("[SSLIX]notifyEai,begint to write data at " + current);
OutputStream out = connection.getOutputStream();
out.write(data);
end = new Date(System.currentTimeMillis());
log.info("write data ok at " + end + ",cost:"
+ (end.getTime() - current.getTime()));
StringBuffer receivedData = new StringBuffer();
current = new Date(System.currentTimeMillis());
log.info("begint to read data at " + current);
InputStreamReader inReader = new InputStreamReader(connection
.getInputStream(), "UTF-8");
BufferedReader aReader = new BufferedReader(inReader);
String aLine;
while ((aLine = aReader.readLine()) != null) {
receivedData.append(aLine);
}
end = new Date(System.currentTimeMillis());
log.info("read data ok at " + end + ",cost:"
+ (end.getTime() - current.getTime()));
log.info("开始返回状态码");
Integer statusCode = connection.getResponseCode();
log.info("返回状态码:" + statusCode);
aReader.close();
connection.disconnect();
return receivedData.toString();
}
public static void main(String[] args) {
ClientSendData t = new ClientSendData();
t.sendData("测试SSL单项连接,向服务端发送数据!");
}
}
单项认证时,只需要设置客户端信任的证书库就行。但是当是双向认证时,还需要设置客户端密钥库密码。
HTTPS双向验证代码如下:
public class ClientSendData {
static Log log = LogFactory.getLog(EaiChannel.class);
//客户端密钥库
private String sslKeyStorePath;
private String sslKeyStorePassword;
private String sslKeyStoreType;
// 客户端信任的证书
private String sslTrustStore;
private String sslTrustStorePassword;
private String eaiUrl;
//初始化数据
public ClientSendData() {
sslKeyStorePath = "D:/ssl/clientKeys.jks";
sslKeyStorePassword = "123456";
sslKeyStoreType = "JKS"; //密钥库类型,有JKS PKCS12等
sslTrustStore = "D:/ssl/clientTrust.jks";
sslTrustStorePassword = "123456";
eaiUrl = "https://test.yihaodian.com:8443/ims/feedbackToPingAn_getData.action";
}
public String sendData(String data) {
String receivedData = null;
try {
System.setProperty("javax.net.ssl.keyStore", sslKeyStorePath);
System.setProperty("javax.net.ssl.keyStorePassword",sslKeyStorePassword);
System.setProperty("javax.net.ssl.keyStoreType", sslKeyStoreType);
//设置系统参数
System.setProperty("javax.net.ssl.trustStore", sslTrustStore);
System.setProperty("javax.net.ssl.trustStorePassword",
sslTrustStorePassword);
receivedData = send(eaiUrl, data);
} catch (Exception e) {
e.printStackTrace();
}
return receivedData;
}
public static String send(String sendurl, String sendData)
throws Exception {
//和上面一样
}
public static void main(String[] args) {
ClientSendData t = new ClientSendData();
t.sendData("测试SSL双项连接,向服务端发送数据!");
}
}
下面来说说可能会遇到的异常:
1. java.security.NoSuchAlgorithmException
一般来说是密钥库类型不对,如上面的sslKeyStoreType = "JKS" 却写成PKCS12。
也有可能是证书的问题。
2. java.net.UnknownHostException
服务端地址不对。
3.java.net.SocketException: Unexpected end of file from server
这个异常和客户端没有关系,说明已经发送成功。是服务端的问题。有可能是防火墙的原因,也可能是服务端没处理客户端的响应。
另外有人说当URL过长时也会发生此错误,当使用URL发送数据时,可以参考此意见。
4.java.io.IOException:server returned HTTP response code :500
这个异常是服务端代码的问题。服务端相应代码执行时抛出了异常。
最后 如果返回的状态码是200 ,表示成功。
发表评论
-
Spring官网改版后下载
2014-04-11 10:39 715Spring官网改版后找了好久都没有找到直接下载Jar包的链接 ... -
Java 系统架构设计
2014-03-31 21:18 1444首先分为网关和引擎等多个部分: 第一部分:网关 1、主要负责转 ... -
Java 提高系统性能
2014-03-03 22:22 2573首先是从三方面来提高的,应用层面,服务器端层面,数据库层面。 ... -
2013年11月份艺龙旅行网面试题
2013-11-22 23:39 12251.给你两个字符串s1="abc",s2= ... -
国猪555555555
2013-11-22 00:16 1001国足第一招:场地太差,不适应。 国足第二招:场地太好,不适应。 ... -
自己认为的一些技术点
2013-08-14 00:12 11601.rest风格的编程。 2.memcached的命中率低的问 ... -
HttpClient
2013-01-14 23:57 1010package org.abin.lee.test.http; ... -
JAVA单例模式读取properties配置文件
2012-12-16 01:12 2619前段时间出差去做一个数据接口的项目,有很多参数需要从工程中的配 ... -
Java 反射调用方法
2012-10-22 23:52 947package lc.abin.lee.reflect; i ... -
Java中的transient,volatile和strictfp关键字
2012-09-12 18:00 793http://www.iteye.com/topic/5295 ... -
Server JBoss v5.0 at localhost was unable to start within 50 seconds.
2012-09-05 11:35 1842[标题]:[转]JBoss was unable to sta ... -
HttpUrlConnection 开发例子
2012-03-25 16:23 3312/*** * * 发送HTTP请求 * @ ... -
Java Enum类型定义的方法
2012-03-12 12:34 2301//枚举接口 package com.abin.info.s ... -
Rational Rose 2003 下载及破解方法
2012-03-06 12:49 1358FROM:http://blog.csdn.net/fengl ... -
使用Spring进行面向切面(AOP)编程
2012-02-22 10:35 23021.aop理论知识 横切性关注点:对哪些方法拦截,拦截后怎么处 ... -
BASE64、MD5、SHA、HMAC几种加密算法
2012-02-21 12:53 8765BASE64编码算法不算是真正的加密算法。 MD5、 ... -
文本文件和二进制文件区别及java中字节流和字符流归纳
2012-02-17 15:48 2952首先在物理上文本文件和二进制文件并没有区别,都是以二进制01的 ... -
Java 字节流转化为文件
2012-02-17 15:46 5651已知:byte[] bytes=new FileToBytes ... -
Java核心之Java内存分配原理
2012-02-17 13:40 929JAVA内存分配与管理是Java的核心技术之一,之前我们曾介绍 ... -
传智播客——JPA
2012-02-17 09:31 1518首先,JPA不是ORM框架,而是SUN官方提出的JAVA持久化 ...
相关推荐
https双向认证原理,证书生成,nginx配置,Java调用,应用实例,http通信存在得问题,单向认证流程,双向认证流程,使用curl作为客户端调用验证
本文实现了OpenSSL的CA跟证书的制作、服务器和客户端证书的制作,并使用node.js实现了服务器和客户端代码,也实现了java代码,同时验证了SSL/TLS单向和双向认证。
3.5 使用验证器进行输入校验 161 3.5.1 输入校验概述 161 3.5.2 JSF内置校验器 162 3.5.3 校验失败后的错误消息 163 3.5.4 必填校验器 165 3.6 自定义校验器 166 3.6.1 开发自定义校验器 166 3.6.2 注册校验器 167 ...
SSLContext Kickstart :locked_with_key: 使用以下方法安装库: 用安装 < groupId>io.github.hakky54 < artifactId>sslcontext-kickstart < version>6.2.0 使用Gradle安装 implementation ' io.github.hakky54:...
带有数字签名的加密网络应用3189.7 小结319第三部分综合应用篇第10章终极武器—数字证书33210.1...单向认证服务36911.4 双向认证服务38111.5 应用举例38711.6 小结387第12章量体裁衣—为应用选择合适的装备38912.1 实例...
第10章终极武器—数字证书332 10.1 数字证书详解332 10.2 模型分析335 10.3 证书管理337 ...单向认证服务369 11.4 双向认证服务381 11.5 应用举例387 11.6 小结387 第12章量体裁衣—为应用选择合适的装备389 12.1 实例...
内容:hibernate001:通过 XML 配置的基本示例 hibernate002:通过注释配置的基本示例 hibernate003:会话方法练习 hibernate004:组件使用示例 hibernate005:单向关系映射示例 hibernate006:双向关系映射示例 ...
jpa_associations_complete ... 实现了这些注释的单向和双向变体。 嵌入式数据库服务器是使用 Apache Derby 实现的。 单元测试允许验证关联集合的获取以及对关联集合的插入和更新的级联 配置是基于 Spring XML 的。
1.使用双向一对多关联,不使用单向一对多 2.灵活使用单向一对多关联 3.不用一对一,用多对一取代 4.配置对象缓存,不使用集合缓存 5.一对多集合使用Bag,多对多集合使用Set 6. 继承类使用显式多态 7. 表字段要少,表...
6.1 java程序员的春天厚礼—spring 2.5 349 6.1.1 爱上spring 2.5的十大理由 350 6.1.2 一睹spring 2.5芳容 351 6.1.3 spring 2.5拿手戏——控制反转与依赖注入 353 6.1.4 何为“面向切面编程aop” 356 6.1.5 ...