# 利刃出鞘_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 核心原理解析(八)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/409035.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构-KMP算法

先解决 前缀与后缀串的最长匹配长度信息(前缀或后缀都不能取整体)。如下 位置6的前缀最长串就是abcab(不能取全部,即不能为abcabc) 位置6的后缀最长串就是bcabc(不能取全部,即不能为abcabc)

[Linux#47][网络] 网络协议 | TCP/IP模型 | 以太网通信

目录 1.网络协议 2.协议分层 2.1 OSI七层模型 2.2TCP/IP五层(四层)模型 2.3 以太网通信 1.网络协议 "协议"本质就是一种约定 计算机之间的传输媒介是光信号和电信号. 通过 "频率" 和 "强弱" 来表示 0 和 1 这样的 信息. 要想传递各种不同…

HTML+CSS浮动和清除浮动的效果及其应用场景举例

一、清除浮动的效果 解释 .container&#xff1a;用于展示浮动和清除浮动效果的容器&#xff0c;具有边框和背景色以便于区分。 .float-box&#xff1a;浮动元素&#xff0c;用不同的背景色标识。 .clearfix&#xff1a;使用伪元素清除浮动的类&#xff0c;应用于第二个容器。 …

IDEA 2024.2.0.2 使用 Jrebel and XRebel 热部署

安装 激活 工具网站中url和邮箱复制进去 设置 允许项目自动构建 允许开发过程中自动部署

python面向对象—封装、继承、多态

封装 ① 把现实世界中的主体中的属性和方法书写到类的里面的操作即为封装 ② 封装可以为属性和方法添加为私有权限&#xff0c;不能直接被外部访问 在面向对象代码中&#xff0c;我们可以把属性和方法分为两大类&#xff1a;公有&#xff08;属性、方法&#xff09;、私有&…

SQLSugar进阶使用:高级查询与性能优化

文章目录 前言一、高级查询1.查所有2.查询总数3.按条件查询4.动态OR查询5.查前几条6.设置新表名7.分页查询8.排序 OrderBy9.联表查询10.动态表达式11.原生 Sql 操作 &#xff0c;Sql和存储过程 二、性能优化1.二级缓存2.批量操作3.异步操作4.分表组件&#xff0c;自动分表5.查询…

LCP:60 排列序列[leetcode-4]

LCP:60 排列序列 给出集合 [1,2,3,...,n]&#xff0c;其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况&#xff0c;并一一标记&#xff0c;当 n 3 时, 所有排列如下&#xff1a; "123""132""213""231""312"&quo…

09 复合查询

前面的查询都是对一张表进行查询&#xff0c;但这远远不够 基本查询回顾 查询工资高于500或岗位为MANAGER的雇员&#xff0c;同时还要满足他们的姓名首字母为大写的J select * from EMP where (sal>500 or job‘MANAGER’) and ename like ‘J%’; 按照部门号升序而雇员的…

【git】git进阶-blame/stash单个文件/rebase和merge/cherry-pick命令/reflog和log

文章目录 git blame查看单个文件修改历史git stash单个文件git rebase命令git rebase和git merge区别git cherry-pick命令git reflog和git log区别 git blame查看单个文件修改历史 git blame&#xff1a;查看文件中每行最后的修改作者 git blame your_filegit log和git show结合…

基本数据类型及命令

String String 是Redis最基本的类型&#xff0c;Redis所有的数据结构都是以唯一的key字符串作为名称&#xff0c;然后通过这个唯一的key值获取相应的value数据。不同的类型的数据结构差异就在于value的结构不同。 String类型是二进制安全的。意思是string可以包含任何数据&…

requests库

一、pycharm导入requests库 在终端下输入pip install requests 按回车即可导入。 如果使用pip list 可以查到requests库即导入成功。 二、requsets的get请求 url为我们要请求的网址&#xff0c;headers用于伪造请求头&#xff0c;有的网址拒绝爬虫访问。 # # GET # import r…

【JAVA基础】四则运算符

文章目录 四则运算结合运算符自增运算符关系和boolean运算符 四则运算 在java当中&#xff0c;使用运算符、-、*、/ 表示加减乘除&#xff0c;当参与 / 运算的两个操作数都是整数的时候&#xff0c;表示整数除法&#xff1b;否则表示浮点数。整数的求余操作用 % 表示。 Syste…

svn使用教程学习

如何撤销未提交的本地修改&#xff1f; 点击svn提交&#xff0c;双击文件&#xff0c;可以查看准备提交的修改内容。 如何撤销已经提交的内容&#xff1f; 选择‘复原此版本做出的修改’&#xff1a; 但是&#xff0c;这个只是复原在本地了&#xff0c;我们需要提交上去&…

【大模型理论篇】Mixture of Experts(混合专家模型, MOE)

1. MoE的特点及为什么会出现MoE 1.1 MoE特点 Mixture of Experts&#xff08;MoE&#xff0c;专家混合&#xff09;【1】架构是一种神经网络架构&#xff0c;旨在通过有效分配计算负载来扩展模型规模。MoE架构通过在推理和训练过程中仅使用部分“专家”&#xff08;子模型&am…

C语言 | Leetcode C语言题解之第355题设计推特

题目&#xff1a; 题解&#xff1a; typedef struct {int tweetId;int userId; } Tweet;typedef struct {int* dict[501];Tweet* tweetList;int tweetListLen; } Twitter;Twitter* twitterCreate() {Twitter* obj malloc(sizeof(Twitter));for (int i 0; i < 501; i) {ob…

在vscode上便捷运行php文件

目录 前言 1. 准备工作 2. 创建文件 3. 下载插件 4.设置访问配置文件 5. 配置默认浏览器 6. 进行验证 前言 对于学习安全的我们来说,部署环境,靶场,和配置环境都是习以为常的一件事情,平时访问靶场都是通过小皮来,今天突想着最近需要对一些漏洞的原理进行研究,所以需要能够…

iOS 17.6.1版本重发,修复高级数据保护错误

今日&#xff0c;苹果没有带来iOS 17.6.2的更新&#xff0c;而是重新发布了iOS 17.6.1版本&#xff0c;本次升级版本号为21G101&#xff0c;高于第一版的21G93。距离初版发布相隔一周半时间。 在 iOS / iPadOS 17.6.1 的更新日志&#xff0c;苹果公司写道&#xff1a;“此更新包…

【生日视频制作】一排美女在越野车上跳舞拉横幅条幅AE模板修改文字软件生成器教程特效素材【AE模板】

一排美女在越野车上跳舞拉条横幅生日视频制作教程AE模板改字 怎么如何做的【生日视频制作】一排美女在越野车上跳舞拉横幅条幅AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频…

怎样更改电脑的MAC地址?

怎样更改电脑的MAC地址&#xff1f; 电脑的机器码是可以修改的。 操作步骤&#xff1a; 1、通过按WINR键&#xff0c;调来电脑的接运行窗口&#xff0c;打开CMD命令来查看机器码。 2、命令提示符窗口里输入ipconfig /all&#xff0c;回车&#xff0c;即可显示出当前电脑的网…

Linux内核定时器、阻塞_非阻塞IO

一.内核时间管理 Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、对于我们驱动编写者来说最常用的定时器。硬件定时器提供时钟源,时钟源的频率可以设置, 设置好以后就周期性的产生定时中断,系统使用定时中断来计时。中断周期性产生的频率就是系统频率…