单向验证,客户机只验证服务器的证书,服务器不验证客户机的证书。所以只需要生成服务器端的keystore.
1. 以jks格式生成服务器端包含Public key和Private Key的keystore文件,keypass与storepass务必要一样,因为在tomcat server.xml中只配置一个password.
keytool -genkey -alias server -keystore serverKeystore.jks -keypass 123456 -storepass 123456 -keyalg RSA -keysize 512 -validity 365 -v -dname "CN = W03GCA01A,O = ABC BANK,DC = Server Https,DC = ABC,OU = Firefly Technology And Operation"
2. 从keystore中导出别名为server的服务端证书.
keytool -export -alias server -keystore serverKeystore.jks -storepass 123456 -file server.cer
3. 将server.cer导入客户端的信任证书库clientTruststore.jks。
keytool -import -alias trustServer -file server.cer -keystore clientTruststore.jks -storepass 123456
服务器端: serverKeystore.jks
客户端: clientTruststore.jks
4. 在tomcat 配置server.xml
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="keystore/serverKeystore.jks" keystorePass="123456" />
5. 客户端代码
/**
*
*/
package com.ssl.http;
import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
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;
/**
*
* @author kevin
*
*/
public class ClientOneWaySSL {
public final static void main(String[] args) throws Exception {
DefaultHttpClient httpclient = new DefaultHttpClient();
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
FileInputStream instream = new FileInputStream(new File("com/ssl/http/clientTruststore.jks"));
try {
trustStore.load(instream, "123456".toCharArray());
} finally {
instream.close();
}
SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore);
Scheme sch = new Scheme("https", socketFactory, 8443);
httpclient.getConnectionManager().getSchemeRegistry().register(sch);
HttpGet httpget = new HttpGet("https://w03gca01a/");
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());
}
if (entity != null) {
entity.consumeContent();
}
// When HttpClient instance is no longer needed,
// shut down the connection manager to ensure
// immediate deallocation of all system resources
httpclient.getConnectionManager().shutdown();
}
}
6. 运行成功打印如下:
executing requestGET https://w03gca01a/ HTTP/1.1
----------------------------------------
HTTP/1.1 200 OK
Response content length: 7347
备注:
A. 如出现如下error,请配置C:\WINDOWS\system32\drivers\etc\hosts, 将“127.0.0.1 w03gca01a” 加在hosts文件中
executing requestGET https://w03gca01a/ HTTP/1.1
Exception in thread "main" javax.net.ssl.SSLException: hostname in certificate didn't match: <w03gca01a> != <localhost>
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:220)
at org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:54)
B. 本文用到 httpcore-4.0.1.jar httpclient-4.0.1.jar httpmime-4.0.1.jar,下载地址:
http://hc.apache.org/downloads.cgi
分享到:
相关推荐
Tomcat中SSL配置(SSL安全协议认证)
java实现SSL的双向认证.模拟场景: Server端和Client端通信,需要进行授权和身份的验证,即Client只能接受Server的消息,Server只能接受Client的消息。
要实现SSL双向认证, 你必须同时配置Web服务器证书和客户端证书, 并且需要在服务器和客户端之间正确安装根证书。如此方可实现如文所示双向认证。
压缩包里有客户端源码和服务器端源码,支持TCP的双向认证,也支持WEBSOCKET的双向认证,内附测试 wss的测试例子, 需要生成PKCS12的证书,导入浏览器才可以测试。
主要介绍了Java实现SSL双向认证的方法,实例分析了ssl认证的原理与相关实现技巧,需要的朋友可以参考下
java实现_SSL双向认证,里面详细介绍怎样实现,还包括完整的实现代码,直接可用
ssl自制全套证书(包含服务器端、客户端、ca端的证书,格式有.crt,.key,.truststore,.keystore,.p12,.cer,.pem等类型),当时要配置webservice接口、tomca、nginx通过ssl访问的证书,弄了好久才生成了一套能使用的。...
JAVA通过LDAP+SSL(证书)实现用户和组织(部门)增删改查(Java代码部分),里面包含源码和文档,以便大家测试。
java实现 SSL双向认证,java ssl包使用
Tomcat6配置使用SSL双向认证
https ssl Tomcat中实现https安全连接与SSL配置https ssl Tomcat中实现https安全连接与SSL配置https ssl Tomcat中实现https安全连接与SSL配置https ssl Tomcat中实现https安全连接与SSL配置
Internet SSL编程及Java实现
NULL 博文链接:https://1002878825-qq-com.iteye.com/blog/1838805
SSL双向认证SSL双向认证
使用方法见:https://blog.csdn.net/upset_ming/article/details/96491058 1. 修改了前一版本中证书验证的bug,支持JDK8的高版本 2. 支持国密SSL双向认证 3. 将过期的国密证书替换为新证书
如果不存在,使用whereis java命令你会看到java: /usr/bin/java /etc/java /usr/lib/java /usr/share/java 打开java.conf,找到JAVA_HOME路径 2.将bcprov-jdk16-146.jar放入JAVA_HOME/jre/lib/ext下 3.打开JAVA_...
Tomcat配置SSL双向认证简单实例
Java Socket 实现SMTP邮件发送,支持SSL/TSL
本文档基于JDK+apache-tomcat运行环境进行客户端和服务器端https配置,即SSL双向认证配置
很多网站使用https来确保网站的安全性,该文档详细的讲述了,如何使用在tomcat中使用https服务,如何使用jdk自带的keytool工具创建证书,并且实现服务端和客户端的双向认证。