设为首页 收藏本站
查看: 1080|回复: 0

[经验分享] SSL双向认证Java实现 Tomcat篇

[复制链接]

尚未签到

发表于 2015-8-10 08:45:01 | 显示全部楼层 |阅读模式
  
  双向验证,在客户机连接服务器时,客户机验证服务器的证书,服务器验证客户机的证书,链接双方都要对彼此的数字证书进行验证,保证这是经过授权的才能够连接。
1. 生成服务器端的keystore和truststore文件:
    1.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"
    1.2. 从keystore中导出别名为server的服务端证书.
    keytool -export -alias server -keystore serverKeystore.jks -storepass 123456 -file server.cer

    1.3. 将server.cer导入客户端的信任证书库clientTruststore.jks。
     keytool -import -alias trustServer -file server.cer -keystore clientTruststore.jks -storepass 123456

2. 生成客户端的keystore和truststore文件:
    1.1. 以jks格式生成服务器端包含Public key和Private Key的keystore文件。
    keytool -genkey -alias client -keystore clientKeystore.jks -keypass 123456 -storepass 123456 -keyalg RSA  -keysize 512 -validity 365 -v -dname "CN = W03GCA01A,O = ABC BANK,DC = Client Https,DC = ABC,OU = Firefly Technology And Operation"
    1.2. 从keystore中导出别名为client的客户端证书.
    keytool -export -alias client -keystore clientKeystore.jks -storepass 123456 -file client.cer

    1.3. 将client.cer导入服务端的信任证书库serverTruststore.jks。
     keytool -import -alias trustClient -file client.cer -keystore serverTruststore.jks -storepass 123456


服务器端: serverKeystore.jks   serverTruststore.jks
客户端:   clientKeystore.jks   clientTruststore.jks

3. 在tomcat 配置server.xml



Xml代码 http://image28.360doc.com/DownloadImg/2011/05/0716/11532109_1.gif http://image28.360doc.com/DownloadImg/2011/05/0716/11532109_2.png


  
  4. 客户端代码



Java代码 http://image28.360doc.com/DownloadImg/2011/05/0716/11532109_1.gif http://image28.360doc.com/DownloadImg/2011/05/0716/11532109_2.png

  • package com.ssl.http;

  • import java.io.File;
  • import java.io.FileInputStream;
  • import java.security.KeyStore;
  • import java.security.KeyStoreException;

  • 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 ClientTwoWaySSL {

  •     /**
  •      * @param args
  •      * @throws Exception
  •      */
  •     public static void main(String[] args) throws Exception {
  •         // TODO Auto-generated method stub

  •         DefaultHttpClient httpclient = new DefaultHttpClient();

  •         KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
  •         KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());

  •         FileInputStream keyStoreIn = new FileInputStream(new File(
  •                 "com/ssl/http/clientKeystore.jks"));
  •         FileInputStream trustStoreIn = new FileInputStream(new File(
  •                 "com/ssl/http/clientTruststore.jks"));

  •         try {
  •             keyStore.load(keyStoreIn, "123456".toCharArray());
  •             trustStore.load(trustStoreIn, "123456".toCharArray());
  •         } finally {
  •             keyStoreIn.close();
  •             trustStoreIn.close();
  •         }

  •         SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore,
  •                 "123456", trustStore);
  •         Scheme sch = new Scheme("https", socketFactory, 8443);

  •         httpclient.getConnectionManager().getSchemeRegistry().register(sch);

  •         HttpGet httpget = new HttpGet("https://w03gca01a:8443/");

  •         System.out.println("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();
  •         }
  •         httpclient.getConnectionManager().shutdown();

  •     }

  • }
  
  备注:
  A. 如出现如下error,请配置C:\WINDOWS\system32\drivers\etc\hosts, 将“127.0.0.1     w03gca01a” 加在hosts文件中



Exception代码 http://image28.360doc.com/DownloadImg/2011/05/0716/11532109_1.gif http://image28.360doc.com/DownloadImg/2011/05/0716/11532109_2.png

  • # executing requestGET https://w03gca01a/ HTTP/1.1
  • # Exception in thread "main" javax.net.ssl.SSLException: hostname in certificate didn't match:  !=
  • #     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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-96734-1-1.html 上篇帖子: 关于TOMCAT 运行提示 log4j:ERROR Could not find value for key log4j.appender.CONSOLE 下篇帖子: 用JMeter来测试Tomcat的性能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表