草庐IT

Tomcat 入门实战(3)--Https 配置

且行且码 2023-03-28 原文

本文主要介绍如何在 Tomcat 中配置 Https,文中所使用到的软件版本:Centos 7.9.2009、Java 1.8.0_321、Tomcat 8.5.84。

1、Tomcat SSL 实现

Tomcat 有三种 SSL 的实现:

  • JSSE implementation provided as part of the Java runtime
  • JSSE implementation that uses OpenSSL
  • APR implementation, which uses the OpenSSL engine by default

Tomcat 会根据环境自动选择相应的实现。如果没有安装 tomcat-native,则使用第一种实现;如果安装了 tomcat-native,当 Connector 的 protocol 属性配置为 "HTTP/1.1"时,使用第二种实现,当 protocol 配置为 "org.apache.coyote.http11.Http11AprProtocol" 时使用第三种实现。

2、生成密钥库及证书

2.1、创建目录

在 Tomcat 根目录下创建 ssl/keytool 目录,用于存放 keytool 生成的密钥库及导出的证书,创建 ssl/openssl 目录,用于存放 OpenSSL 生成的证书。

mkdir -p ssl/keytool
mkdir -p ssl/openssl

2.2、生成密钥库

使用 Java 自带的 keytool 工具在 ssl/keytool 目录下生成密钥库。

2.2.1、生成服务端密钥库

keytool -genkeypair -alias tomcat -keyalg RSA -keystore server.keystore -storetype pkcs12 --storepass 123456

2.2.2、生成客户端密钥库

keytool -genkeypair -alias someone -keyalg RSA -keystore client.p12 -storetype pkcs12 --storepass 123456

如果服务端开启客户端认证(需要验证客户端的证书),需要使用把该密钥库导入客户端。

2.2.3、生成信任密钥库

keytool -exportcert -keystore client.p12 --storepass 123456 -alias someone -file client.cer #先从客户端密钥库导出证书
keytool -importcert -keystore trust.keystore -file client.cer -alias someone -storetype pkcs12 --storepass 123456 #把客户端证书导入信任库

信任密钥库用于校验客户端证书是否有效。

keytool 的详细使用可参考 Java Keytool 介绍

2.3、生成证书

使用 OpenSSL 在 ssl/openssl 目录下生成证书。

2.3.1、生成根证书

openssl genrsa -out ca.key
openssl req -new -key ca.key -out ca.csr
openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.pem

2.3.2、生成服务端证书

openssl genrsa -out server.key
openssl req -new -key server.key -out server.csr
openssl ca -days 3650 -in server.csr -cert ca.pem -keyfile ca.key -out server.pem

2.3.3、生成客户端证书

openssl genrsa -des3 -out client.key 2048
openssl req -new -key client.key -out client.csr
openssl ca -days 1500 -in client.csr -cert ca.pem -keyfile ca.key -out client.pem
openssl pkcs12 -export -clcerts -in client.pem -inkey client.key -out client.p12

2.3.4、根证书导入信任库

cd ../keytool
keytool -importcert -keystore trust.keystore -file ../openssl/ca.pem -alias ca -storetype pkcs12 --storepass 123456

OpenSSL 生成证书的详细使用可参考  OpenSSL 介绍(5)--数字证书

3、未安装 Tomcat Native Library 配置 Https

主要修改 conf/server.xml 中的 Connector 配置。

3.1、使用 keytool 生成的密钥库配置 Https

<Connector port="8443" protocol="HTTP/1.1" maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="ssl/keytool/server.keystore" 
            certificateKeystorePassword="123456" certificateKeyAlias="tomcat" type="RSA" />
    </SSLHostConfig>
</Connector>

如果需要开启客户端认证,则配置如下:

<Connector port="8443" protocol="HTTP/1.1"
           maxThreads="150" SSLEnabled="true">
    <SSLHostConfig certificateVerification="required" truststoreFile="ssl/keytool/trust.keystore" truststorePassword="123456">
        <Certificate certificateKeystoreFile="ssl/keytool/server.keystore" 
            certificateKeystorePassword="123456" certificateKeyAlias="tomcat" 
            type="RSA" />
    </SSLHostConfig>
</Connector>

3.2、使用 OpenSSL 生成的证书配置 Https

<Connector port="8443" protocol="HTTP/1.1" maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeyFile="ssl/openssl/server.key" 
            certificateFile="ssl/openssl/server.pem" type="RSA" />
    </SSLHostConfig>
</Connector>

如果需要开启客户端认证,则配置如下:

<Connector port="8443" protocol="HTTP/1.1"
           maxThreads="150" SSLEnabled="true">
    <SSLHostConfig certificateVerification="required" truststoreFile="ssl/keytool/trust.keystore" truststorePassword="123456">
        <Certificate certificateKeyFile="ssl/openssl/server.key" 
            certificateFile="ssl/openssl/server.pem" type="RSA" />
    </SSLHostConfig>
</Connector>

由于这里 SSL 使用的是第一种实现,所以仍需通过 truststoreFile 及 truststorePassword 属性配置信任库来验证客户端证书,否则可以通过 caCertificateFile 配置根证书来验证客户端证书。

4、安装了 Tomcat Native Library 配置 Https

 tomcat-native 的安装可参考:Tomcat 入门实战(2)--Tomcat Native Library 使用

<Connector port="8443" protocol="HTTP/1.1"
                maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeyFile="ssl/openssl/server.key" 
            certificateFile="ssl/openssl/server.pem" type="RSA" />
    </SSLHostConfig>
</Connector>

如果需要开启客户端认证,则配置如下:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
                maxThreads="150" SSLEnabled="true">
    <SSLHostConfig certificateVerification="required" caCertificateFile="ssl/openssl/ca.pem">
        <Certificate certificateKeyFile="ssl/openssl/server.key" 
            certificateFile="ssl/openssl/server.pem" type="RSA" />
    </SSLHostConfig>
</Connector>

这里 protocol 设为 "org.apache.coyote.http11.Http11AprProtocol" 以启用 APR,设置为 "HTTP/1.1" 时不启用 APR。

5、客户端访问

如果服务端(Tomcat) 开启了客户端认证,需要把 2.3.2 生成的客户端密钥库、2.3.2 生成的客户端密钥导入浏览器才能访问,否则拒绝访问;Java 客户端的访问可参考:https://www.cnblogs.com/wuyongyin/tag/Http

 

 

参考:

https://tomcat.apache.org/tomcat-8.5-doc/ssl-howto.html

https://tomcat.apache.org/tomcat-8.5-doc/config/http.html

 

 

有关Tomcat 入门实战(3)--Https 配置的更多相关文章

  1. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  2. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  3. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  4. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  5. Tomcat AJP 文件包含漏洞(CVE-2020-1938) - 2

    目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控

  6. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  7. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

  8. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  9. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

  10. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

随机推荐