利用keytools为tomcat 7配置ssl双向认证的方法

下面是详细的“利用keytools为tomcat 7配置ssl双向认证的方法”的攻略:

一、生成证书文件

首先,我们需要生成证书文件,可以使用Java自带的keytool工具来完成此步骤。以下是生成证书文件的命令:

keytool -genkeypair -alias client -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 365 -keystore client.keystore -storetype JKS

其中,certfile.crt是生成的证书文件,将其复制到服务器的指定目录下。

二、修改Tomcat配置

  1. 打开Tomcat的配置文件,在连接器中添加以下配置,启用SSL:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" maxThreads="200"
           scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS"
           sslEnabledProtocols="TLSv1.2,TLSv1.1,TLSv1"/>
  1. 启用“ClientAuth”配置项,开启SSL双向认证:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" maxThreads="200"
           scheme="https" secure="true"
           clientAuth="true" sslProtocol="TLS"
           sslEnabledProtocols="TLSv1.2,TLSv1.1,TLSv1"/>

三、导入证书至keytool

  1. 将之前生成的证书文件导入到keytool中:
keytool -import -trustcacerts -alias client -file certfile.crt -keystore truststore_client.jks -storetype JKS

四、配置双向认证

  1. 在Tomcat的配置文件中,启用SSL双向认证:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" maxThreads="200"
           scheme="https" secure="true"
           clientAuth="true" sslProtocol="TLS"
           sslEnabledProtocols="TLSv1.2,TLSv1.1,TLSv1"
           keystoreFile="../conf/mykey.keystore" keystorePass="changeit"
           truststoreFile="../conf/mytruststore.keystore" truststorePass="changeit"/>
  1. 将之前生成的客户端证书复制到客户端的指定目录下;

  2. 编写Java代码进行双向认证测试,示例代码如下:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.Principal;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLPeerUnverifiedException;

public class HttpsClient {

    public static void main(String[] args) {
        new HttpsClient().testIt();
    }

    private void testIt() {

        String https_url = "https://localhost:8443/";
        URL url;
        try {

            url = new URL(https_url);
            HttpsURLConnection con = (HttpsURLConnection) url.openConnection();

            //dumpl all cert info
            print_https_cert(con);

            //dump all the content
            print_content(con);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    private void print_https_cert(HttpsURLConnection con) {

        if (con != null) {

            try {

                System.out.println("Response Code : " + con.getResponseCode());
                System.out.println("Cipher Suite : " + con.getCipherSuite());
                System.out.println("\n");

                java.security.cert.Certificate[] certs = con.getServerCertificates();
                for (java.security.cert.Certificate cert : certs) {
                    System.out.println("Cert Type : " + cert.getType());
                    System.out.println("Cert Hash Code : " + cert.hashCode());
                    System.out.println("Cert Public Key Algorithm : " + cert.getPublicKey().getAlgorithm());
                    System.out.println("Cert Public Key Format : " + cert.getPublicKey().getFormat());
                    System.out.println("\n");
                }

            } catch (SSLPeerUnverifiedException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

    }

    private void print_content(HttpsURLConnection con) {
        if (con != null) {

            try {

                System.out.println("****** Content of the URL ********");
                BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));

                String input;

                while ((input = br.readLine()) != null) {
                    System.out.println(input);
                }
                br.close();

            } catch (Exception e) {
                e.printStackTrace();
            }

        }

    }
}

示例

以下是两个例子:

示例一

生成证书文件:

keytool -genkeypair -alias client -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 365 -keystore client.keystore -storetype JKS

启用SSL:

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" maxThreads="200"
           scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS"
           sslEnabledProtocols="TLSv1.2,TLSv1.1,TLSv1"/>

导入证书至keytool:

keytool -import -trustcacerts -alias client -file certfile.crt -keystore truststore_client.jks -storetype JKS

配置双向认证:

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" maxThreads="200"
           scheme="https" secure="true"
           clientAuth="true" sslProtocol="TLS"
           sslEnabledProtocols="TLSv1.2,TLSv1.1,TLSv1"
           keystoreFile="../conf/mykey.keystore" keystorePass="changeit"
           truststoreFile="../conf/mytruststore.keystore" truststorePass="changeit"/>

示例二

生成证书文件:

keytool -genkeypair -alias client -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 365 -keystore client.keystore -storetype JKS

启用SSL:

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" maxThreads="200"
           scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS"
           sslEnabledProtocols="TLSv1.2,TLSv1.1,TLSv1"/>

导入证书至keytool:

keytool -import -trustcacerts -alias client -file certfile.crt -keystore truststore_client.jks -storetype JKS

配置双向认证:

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" maxThreads="200"
           scheme="https" secure="true"
           clientAuth="true" sslProtocol="TLS"
           sslEnabledProtocols="TLSv1.2,TLSv1.1,TLSv1"
           keystoreFile="../conf/mykey.keystore" keystorePass="changeit"
           truststoreFile="../conf/mytruststore.keystore" truststorePass="changeit"/>

以上就是利用keytools为tomcat 7配置SSL双向认证的方法的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用keytools为tomcat 7配置ssl双向认证的方法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java数组的定义、初始化、及二维数组用法分析

    下面我来详细讲解一下Java数组的定义、初始化、及二维数组用法分析的完整攻略。 Java数组的定义 Java数组是由相同类型元素构成的集合,它是一个固定长度的容器,一旦创建后就不能改变其长度,因此Java数组也称为静态数组。在Java中,数组可以存储数值、字符、对象等信息。 Java数组的定义语法如下: 数据类型[] 数组名 = new 数据类型[数组长度]…

    Java 2023年5月26日
    00
  • java动态构建数据库复杂查询教程

    Java动态构建数据库复杂查询教程 在Java中,我们可以使用动态构建查询语句来满足复杂的查询需求。这种方法无需提前构建好查询语句,而是根据用户的需求动态生成查询条件,从而构建出定制化的查询语句。本文将详细介绍动态构建数据库复杂查询的教程,帮助读者快速上手该技能。 步骤一:简单的查询语句构建 在开始学习动态构建数据库查询之前,我们先来看一下简单的查询语句是如…

    Java 2023年5月19日
    00
  • 详解SpringMVC中的异常处理机制

    详解SpringMVC中的异常处理机制 在SpringMVC中,异常处理是一个非常重要的话题。在Web应用程序中,异常是不可避免的,因此我们需要一种机制来处理它们。本文将详细讲解SpringMVC中的异常处理机制,包括如何定义异常处理器、如何处理异常、如何返回异常信息等。 定义异常处理器 在SpringMVC中,我们可以使用@ControllerAdvice…

    Java 2023年5月18日
    00
  • Struts2修改上传文件大小限制方法解析

    当我们使用Struts2框架进行文件上传时,有时候会遇到上传的文件大小超过了限制的问题。默认情况下,Struts2上传文件大小限制为2M,如果需要修改文件上传大小限制,则需要进行如下操作: 步骤1:添加struts.xml配置 在struts.xml配置文件中添加以下配置,其中10485760代表文件大小限制为10M。 <interceptors&gt…

    Java 2023年5月19日
    00
  • Springboot使用Logback实现日志配置与异常记录

    Spring Boot使用Logback实现日志配置与异常记录 介绍 Spring Boot是一款轻量级的应用框架,它提供了很多有用的功能来简化应用开发流程,其中包括了日志记录功能。Logback是一个优秀的日志框架,它可以取代Java标准库的日志框架,并支持通过XML文件配置日志。在这篇教程中,我们将看到如何在Spring Boot应用中使用Logback…

    Java 2023年5月25日
    00
  • Spring中单例和多例的深入理解

    Spring中单例和多例的深入理解 在软件开发中,对象的生命周期管理非常重要。Spring作为一个非常流行的Java开发框架,提供了两种常用的对象管理方式:单例(Singleton)和多例(Prototype)。本文将详细讲解Spring中单例和多例的深入理解。 单例模式 单例模式是一种常用的创建模式,它保证一个类只有一个实例,并提供一个访问它的全局访问点。…

    Java 2023年5月26日
    00
  • Java13 明天发布(最新最全新特性解读)

    Java13 发布攻略 Java13 于 2019年9月17日发布,在这篇文档中,我们将介绍 Java13 的最新特性。 1. 新特性 以下是 Java13 中的一些新特性: 1.1 Switch 表达式 Java 13 可以使用新的关键字 yield 或 -> 来作为 switch 表达式的返回值。这使得代码更加简洁。 下面是一个例子: public…

    Java 2023年5月19日
    00
  • hibernate测试时遇到的几个异常及解决方法汇总

    Hibernate测试时遇到的几个异常及解决方法汇总 在使用Hibernate进行开发时,我们常常会遇到各种异常以及错误提示,本文将总结一些常见的异常及其解决方法。 环境搭建异常:ClassNotFountException 在进行Hibernate的开发之前,我们需要搭建好相应的开发环境,如JDK、IDE、数据库等。如果其中的某一个组件环境没有搭建好,可能…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部