博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tomcat下HTTPS双向认证配置以及客户端调用案例
阅读量:6842 次
发布时间:2019-06-26

本文共 2930 字,大约阅读时间需要 9 分钟。

1:生成服务器端的keystore和truststore文件

(1)以jks格式生成服务器端包含Public key和Private Key的keystore文件

keytool -genkey -alias qdssfw -keystore serverKeystore.jks -keypass qdssfw -storepass qdssfw -keyalg RSA  -keysize 2048 -validity 3650 -v -dname "CN = qdssfw,O = WZH,DC = WZH,DC = WZH,OU = WZH"

注意:CN的值必须与SSL客户端要连接的SSL服务器的主机名一致。

(2)从keystore中导出别名为server的服务端证书

keytool -export -alias server  -keystore serverKeystore.jks -storepass qdssfw -file server.cer

(3)将 server.cer导入客户端的信任证书库clientTruststore.jks

keytool -import -alias trustServer -file server.cer -keystore clientTruststore.jks -storepass qdssfw

2:生成客户端的keystore和truststore文件

(1)以jks格式生成服务器端包含Public key和Private Key的keystore文件

keytool -genkey -alias client -keystore clientKeystore.jks -keypass qdssfw -storepass qdssfw -keyalg RSA  -keysize 2048 -validity 3650 -v -dname "CN = qdssfw,O = WZH,DC = WZH,DC = WZH,OU = WZH"

(2) 从keystore中导出别名为client的客户端证书.

keytool -export -alias client -keystore clientKeystore.jks -storepass qdssfw -file client.cer

(3)将client.cer导入服务端的信任证书库serverTruststore.jks

keytool -import -alias trustClient -file client.cer -keystore serverTruststore.jks -storepass qdssfw 

3:证书信息

服务器端: serverKeystore.jks   serverTruststore.jks

 

客户端:   clientKeystore.jks   clientTruststore.jks

4:测试

(1)Tomcat服务器端配置双向HTTPS认证

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"  

               maxThreads="150" scheme="https" secure="true"  

           clientAuth="true" sslProtocol="TLS"   

           keystoreFile="keystore/serverKeystore.jks" keystorePass="qdssfw"   

 

        truststoreFile="keystore/serverTruststore.jks" truststorePass="qdssfw"/>

(2)Java客户端访问

public static void main(String[] args) throws Exception {

        DefaultHttpClient httpclient = new DefaultHttpClient();  

  

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

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

  

        FileInputStream keyStoreIn = new FileInputStream(new File("C:\\ca2\\clientKeystore.jks"));  

        FileInputStream trustStoreIn = new FileInputStream(new File("C:\\ca2\\clientTruststore.jks"));  

  

        try {  

            keyStore.load(keyStoreIn, "qdssfw".toCharArray());  

            trustStore.load(trustStoreIn, "qdssfw".toCharArray());  

        } finally {  

            keyStoreIn.close();  

            trustStoreIn.close();  

        }  

  

        SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore,  "qdssfw", trustStore);  

        Scheme sch = new Scheme("https", socketFactory, 8443);  

  

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

  

        HttpGet httpget = new HttpGet("https://qdssfw:8443/test02/TestServlet");  

  

        System.out.println("Request:" + httpget.getRequestLine());  

  

        HttpResponse response = httpclient.execute(httpget);  

        HttpEntity entity = response.getEntity();  

   

        System.out.println(response.getStatusLine());  

        

        if (entity != null) {  

            System.out.println("Response content length: "  + entity.getContentLength());  

            

            System.out.println(readResponseBody(entity.getContent()));

        }  

        if (entity != null) {  

            entity.consumeContent();  

        }  

        

        httpclient.getConnectionManager().shutdown();  

  

  }  

备注:修改host文件增加:127.0.0.1qdssfw

转载地址:http://xfzul.baihongyu.com/

你可能感兴趣的文章
Confluence 6 配置 LDAP 连接池
查看>>
JavaScript学习之旅-3(原创)
查看>>
MP实战系列(六)之代码生成器讲解
查看>>
7月24日至7月30日技术要点
查看>>
关于支付宝的坑
查看>>
[JavaScript 随笔] 关于 this 你必须知道这几点
查看>>
iOS核心动画类型介绍
查看>>
使用Kotlin 1.1.5 的REPL 来简单分析一下Java 9 中的$ jmod list java.base.jmod
查看>>
android阿里面试java基础锦集
查看>>
旧手机的新玩法:postmarketOS 已适配上百款安卓手机
查看>>
CDH5.4.7安装Hadoop集群安装主机失败
查看>>
Java微信开发_Exception_02_"errcode":40164,"errmsg":"invalid ip 61.172.68.219, not in whitelist hint...
查看>>
kali更新到2018出现安装包校验异常
查看>>
JS+Canvas的棋盘游戏和Java的动态结合
查看>>
记一次Servlet中getAttribute的错误.
查看>>
oracle无密码登录
查看>>
干货 | 只有100个标记数据,如何精确分类400万用户评论?
查看>>
创建数据库脚本
查看>>
python异步编程--回调模型(selectors模块)
查看>>
Linux无法解析主机问题
查看>>