# 利刃出鞘_Tomcat 核心原理解析(九)-- Tomcat 安全

2024-08-25 17:12

本文主要是介绍# 利刃出鞘_Tomcat 核心原理解析(九)-- Tomcat 安全,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

利刃出鞘_Tomcat 核心原理解析(九)-- Tomcat 安全

一、Tomcat专题 - Tomcat安全 - 配置安全

1、 删除 tomcat 的 webapps 目录下的所有文件,禁用 tomcat 管理界面.

如下目录均可删除:

D:\java-test\apache-tomcat-8.5.42-windows-x64\apache-tomcat-8.5.42\webapps\docs
D:\java-test\apache-tomcat-8.5.42-windows-x64\apache-tomcat-8.5.42\webapps\examples
D:\java-test\apache-tomcat-8.5.42-windows-x64\apache-tomcat-8.5.42\webapps\host-manager
D:\java-test\apache-tomcat-8.5.42-windows-x64\apache-tomcat-8.5.42\webapps\manager
D:\java-test\apache-tomcat-8.5.42-windows-x64\apache-tomcat-8.5.42\webapps\ROOT\

2、 注释或删除 tomcat-users.xml 文件内的所有用户权限;

如:D:\java-test\apache-tomcat-8.5.42-windows-x64\apache-tomcat-8.5.42\conf\tomcat-users.xml


<?xml version="1.0" encoding="UTF-8"?><tomcat-users xmlns="http://tomcat.apache.org/xml"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"version="1.0"><!-- Tomcat安全 - 配置安全:需删除以下 -->
<!-- 
<role rolename="admin-gui"/>
<role rolename="admin-script"/>   
-->
<!--  <user username="dzs168" password="dzs168" roles="admin-script,admin-gui"/>  --><!-- Tomcat安全 - 配置安全:需删除以下 -->
<!-- 
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="dzs168" password="dzs168" roles="admin-script,admin-gui,manager-gui,manager-script"/>--></tomcat-users>

3、更改关闭 tomcat 指令或禁用;

tomcat 的 server.xml 中定义了可以直接关闭 Tomcat 实例的管理端口(默认8005)。

可以通过 telnet 连接上该端口之后,输入 SHUTDOWN (此为默认关闭指令)即可关闭 Tomcat 实例(注意,此时虽然实例关闭了,但是进程还是存在的)。由于默认关闭 Tomcat 的端口和指令都很简单。默认端口为8005,指令为 SHUTDOWN 。

C:\Users\Administrator>  telnet 127.0.0.1 8005
shutdown 
C:\Users\Administrator>  

1)解决方案一:

修改 D:\java-test\apache-tomcat-8.5.42-windows-x64\apache-tomcat-8.5.42\conf\server.xml 配置文件。

# 更改端口号和指令:
<Server port="1234" shutdown="dzs168">

2)解决方案二:

修改 D:\java-test\apache-tomcat-8.5.42-windows-x64\apache-tomcat-8.5.42\conf\server.xml 配置文件。

# 禁用8005端口:
<Server port="‐1" shutdown="SHUTDOWN">

4、定义错误页面

在 webapps/ROOT 目录下定义错误页面 404.html,500.html,然后在 tomcat/conf/web.xml中进行配置 , 配置错误页面:


<error‐page><error‐code>404</error‐code><location>/404.html</location>
</error‐page>
<error‐page><error‐code>500</error‐code><location>/500.html</location>
</error‐page>

这样配置之后,用户在访问资源时出现404,500这样的异常,就能看到我们自定义的错误页面,而不会看到异常的堆栈信息,提高了用户体验,也保障了服务的安全性。

二、 Tomcat专题 - Tomcat安全 - 传输安全

1、应用安全

  • 在大部分的 Web 应用中,特别是一些后台应用系统,都会实现自己的安全管理模块(权限模块),用于控制应用系统的安全访问,基本包含两个部分:
    认证(登录/单点登录)和授权(功能权限、数据权限)两个部分。

  • 对于当前的业务系统,可以自己做一套适用于自己业务系统的权限模块,也有很多的应用系统直接使用一些功能完善的安全框架,将其集成到我们的 web 应用中,如:SpringSecurity、Apache Shiro等。

2、传输安全–HTTPS 介绍

HTTPS:全称是超文本传输安全协议(Hypertext Transfer Protocol Secure),是一种网络安全传输协议。在 HTTP 的基础上加入 SSL/TLS 来进行数据加密,保护交换数据不被泄露、窃取。

3、SSL 和 TLS 是用于网络通信安全的加密协议,它允许客户端和服务器之间通过安全链接通信。

4、SSL 协议的3个特性:

1) 保密:通过SSL链接传输的数据时加密的。
2) 鉴别:通信双方的身份鉴别,通常是可选的,单至少有一方需要验证。
3) 完整性:传输数据的完整性检查。

5、从性能角度考虑,加解密是一项计算昂贵的处理,因为尽量不要将整个Web应用采用 SSL 链接, 实际部署过程中, 选择有必要进行安全加密的页面(存在敏感信息传输的页面)采用SSL通信。

6、HTTPS 和 HTTP 的区别主要为以下四点:

1) HTTPS 协议需要到证书颁发机构 CA 申请 SSL 证书, 然后与域名进行绑定,HTTP 不用申请证书。

2) HTTP 是超文本传输协议,属于应用层信息传输,HTTPS 则是具有SSL加密传安全性传输协议,对数据的传输进行加密,相当于 HTTP 的升级版。

3) HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是8080,后者是8443。

4) HTTP 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

7、HTTPS 协议优势:

1) 提高网站排名,有利于 SEO。

谷歌已经公开声明两个网站在搜索结果方面相同,如果一个网站启用了 SSL,它可能会获得略高于没有 SSL 网站的等级,而且百度也表明对安装了 SSL 的网站表示友好。因此,网站上的内容中启用 SSL 都有明显的 SEO 优势。

2) 隐私信息加密,防止流量劫持。

特别是涉及到隐私信息的网站,互联网大型的数据泄露的事件频发发生,网站进行信息加密势在必行。

3) 浏览器受信任。

自从各大主流浏览器大力支持HTTPS协议之后,访问HTTP的网站都会提示“不安全”的警告信息。

三、Tomcat专题 - Tomcat安全 - 传输安全Https协议配置

1、Tomcat 支持 HTTPS:生成秘钥库文件。

keytool 是 JDK 套件的一个命令。如:C:\Java\jdk1.8.0_131\bin\keytool.exe。
在 tomcat 安装目录下,打开 CMD 命令提示符窗口,
如:D:\java-test\apache-tomcat-8.5.42-windows-x64>


D:\java-test\apache-tomcat-8.5.42-windows-x64>keytool -genkey -alias tomcat -keyalg RSA -keystore tomcatkey.keystore
输入密钥库口令: dzs168再次输入新口令: dzs168您的名字与姓氏是什么?[Unknown]:  dzs168
您的组织单位名称是什么?[Unknown]:  dzs168
您的组织名称是什么?[Unknown]:  dzs168
您所在的城市或区域名称是什么?[Unknown]:  xian
您所在的省//自治区名称是什么?[Unknown]:  xian
该单位的双字母国家/地区代码是什么?[Unknown]:  cn
CN=dzs168, OU=dzs168, O=dzs168, L=xian, ST=xian, C=cn是否正确?[]:  y输入 <tomcat> 的密钥口令(如果和密钥库口令相同, 按回车): dzs168再次输入新口令: dzs168D:\java-test\apache-tomcat-8.5.42-windows-x64>

tomcat-47.png

2、输入对应的密钥库密码, 秘钥密码等信息之后,会在当前文件夹中出现一个秘钥库文件:tomcatkey.keystore

会生成密钥 D:\java-test\apache-tomcat-8.5.42-windows-x64\tomcatkey.keystore

3、将秘钥库文件 tomcatkey.keystore 复制到 tomcat/conf 目录下。

如:D:\java-test\apache-tomcat-8.5.42-windows-x64\apache-tomcat-8.5.42\conf\tomcatkey.keystore

4、 在 tomcat/conf/server.xml 配置 密钥文件。


<!-- 在 tomcat/conf/server.xml 配置 密钥文件 -->
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" schema="https" secure="true" SSLEnabled="true"><SSLHostConfig certificateVerification="false"><Certificate certificateKeystoreFile="D:/java-test/apache-tomcat-8.5.42-windows-x64/apache-tomcat-8.5.42/conf/tomcatkey.keystore" certificateKeystorePassword="dzs168" type="RSA" /></SSLHostConfig>
</Connector>

5、如:D:\java-test\apache-tomcat-8.5.42-windows-x64\apache-tomcat-8.5.42\conf\server.xml


<?xml version="1.0" encoding="UTF-8"?><Server port="8005" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.startup.VersionLoggerListener" /><Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /><Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /><Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /><GlobalNamingResources><Resource name="UserDatabase" auth="Container"type="org.apache.catalina.UserDatabase"description="User database that can be updated and saved"factory="org.apache.catalina.users.MemoryUserDatabaseFactory"pathname="conf/tomcat-users.xml" /></GlobalNamingResources><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><!-- 在 tomcat/conf/server.xml 配置 密钥文件 --><Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" schema="https" secure="true" SSLEnabled="true"><SSLHostConfig certificateVerification="false"><Certificate certificateKeystoreFile="D:/java-test/apache-tomcat-8.5.42-windows-x64/apache-tomcat-8.5.42/conf/tomcatkey.keystore" certificateKeystorePassword="dzs168" type="RSA" /></SSLHostConfig></Connector>			   <!-- Define an AJP 1.3 Connector on port 8009 --><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><!--  默认引擎 标签的虚拟主机,配置为 www.tomcat.com  --><Engine name="Catalina" defaultHost="www.tomcat.com"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><!--1个虚拟主机 --><Host name="www.tomcat.com"  appBase="webapps" unpackWARs="false" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" /></Host><!--2个虚拟主机 --><Host name="oa.tomcat.com"  appBase="webapps2" unpackWARs="false" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" /></Host>	  </Engine></Service>
</Server>
<!-- D:\java-test\apache-tomcat-8.5.42-windows-x64\apache-tomcat-8.5.42\conf\server.xml -->

6、访问 Tomcat ,使用 https 协议。

https://localhost:8443/

tomcat-48.png

上一节关联链接请点击
# 利刃出鞘_Tomcat 核心原理解析(八)

这篇关于# 利刃出鞘_Tomcat 核心原理解析(九)-- Tomcat 安全的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106153

相关文章

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

最新版IDEA配置 Tomcat的详细过程

《最新版IDEA配置Tomcat的详细过程》本文介绍如何在IDEA中配置Tomcat服务器,并创建Web项目,首先检查Tomcat是否安装完成,然后在IDEA中创建Web项目并添加Web结构,接着,... 目录配置tomcat第一步,先给项目添加Web结构查看端口号配置tomcat    先检查自己的to

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实