网站搭建之配置tomcat

news2024/12/23 14:02:26

【 本次配置架构】
在这里插入图片描述

【安全配置】

1.删除后台登录
在tomcat安装目录下的/conf文件下编辑tomcat-users.xml,删除里面带有标签的内容块,默认这部分是被注释了的。注释了任然会显示后台登录,需要彻底删除。
进入末行模式,也就是使用vim进去后,输入

:set nu   #显示行号
:38,45d  #删除38-45行的内容

就可以删除38-45行的数据,删除后重启tomcat,/bin下执行./shutdown,./startup
2.以tomcat服务账户启动tomcat
可以将/opt/tomcat换成你的安装目录

sudo useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat

上述命令创建了一个系统用户 tomcat,并指定了其主目录为 /opt/tomcat

sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod +x /opt/tomcat/bin/*.sh

上述命令将 Tomcat 安装目录及其下所有文件和文件夹的所有权和权限赋予 tomcat 用户,并将 bin 目录下的所有 .sh 文件赋予执行权限。

sudo su - tomcat
cd /opt/tomcat/bin
./catalina.sh start

上述命令切换到 tomcat 用户,并启动 Tomcat。在 tomcat 用户身份下启动 Tomcat,可以确保 Tomcat 运行的安全性和稳定性。
或者

sudo -u tomcat /opt/tomcat/bin/catalina.sh start
#设置tomcat密码为tomcat
passwd tomcat后输入tomcat

#执行后你会发现无法切换到tomcat,/bin/false是默认的shell,因此无法切换
#需要执行以下命令修改后才能切换过去

sudo chsh -s /bin/bash tomcat

然后,您可以使用 su - tomcat 命令切换到 tomcat 用户的身份。
切换后执行./startup启动tomcat
ps -ef | grep tomcat可以验证tomcat是否以tomcat用户身份启动
3.禁用管理界面
在server.xml中注释如下几个地方,记得先备份。当然这只是参考,但最好就别碰,删除管理界面就可以了。

<!--
<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">
-->

...

<!--
</Service>
-->
<!--
<Realm className="org.apache.catalina.realm.LockOutRealm">
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
           resourceName="UserDatabase"/>
</Realm>
-->

将 webapps/manager 和 webapps/host-manager 目录删除,可以连同examples,docs目录一块删除。
4.隐藏版本信息
解压catalina.jar

cd tomcat/lib
jar xf catalina.jar org/apache/catalina/util/ServerInfo.properties
修改server.info行,修改相关的版本信息:server.info=Apache Tomcat
重新压缩catalina.jar
jar uf catalina.jar org/apache/catalina/util/ServerInfo.properties

为了迷惑对方,可以设置一个小点的版本。
重启,可以通过telnet ip:8089 执行get head查看版本信息
5.定义错误页面
打开web.xml文件,新版的tomcat配置文件增加了很多配置,vim web.xml,末行模式输入:/web-app回车找到有关那一块,在上面添加如下内容

<error-page>
            <error-code>404</error-code>
            <location>/error.html</location>
    </error-page>
    <error-page>
            <error-code>403</error-code>
            <location>/error.html</location>
    </error-page>
    <error-page>
            <error-code>500</error-code>
            <location>/error.html</location>
    </error-page>

    <error-page>
    <exception-type>java.lang.NullPointerException</exception-type>
    <location>/error.jsp</location>
    </error-page>

以上状态码错误定义页面可以按需添加。
error.jsp可以如下:

<%@ page contentType="text/html;charset=GB2312"%><%@ page isErrorPage="true"%><html><head><title>错误页面</title></head><body>出错了:</p> 错误信息: <%= exception.getMessage() %><br>Stack Trace is : <pre><font color="red"><%java.io.CharArrayWriter cw = new java.io.CharArrayWriter();java.io.PrintWriter pw = new java.io.PrintWriter(cw,true);exception.printStackTrace(pw);out.println(cw.toString());%></font></pre></body></html>

错误页面放置于webapps下,也就是网站根目录下。

6.通讯加密,使用证书
使用jdk自带的keytool工具生成证书,涉及密码的地方使用tomcat

keytool -genkey -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/apache-tomcat-10.1.8/.keystore

将自签名证书导入到Tomcat的keystore中,您需要将证书导出为
.crt格式的文件
导出crt证书

keytool -export -alias tomcat -file ./mycert.crt -keystore ./.keystore

导出私钥,此时为.p12格式

keytool -importkeystore -srckeystore ./.keystore -destkeystore ./pkcs12keystore.p12 -deststoretype PKCS12 -srcalias tomcat

使用 OpenSSL 工具将 .p12 格式的文件转换为其他格式的私钥文件,例如 .key 格式的文件。

openssl pkcs12 -in ./pkcs12keystore.p12 -nocerts -nodes -out ./private.key

将ssl证书和私钥导入到防火墙,发现nginx配置文件报错,需要在Nginx中导入证书和私钥
在这里插入图片描述

先继续进行配置
配置tomcat燃起只能通过https访问
禁用HTTP连接端口
在server.xml文件中找到以下配置:

<Connector port="8080" protocol="HTTP/1.1"
            connectionTimeout="20000"
            redirectPort="8443" />

将其注释掉或删除。

配置HTTPS连接端口
在server.xml文件中找到以下注释并取消注释:

<!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
      This connector uses the NIO implementation that requires the JSSE
      style configuration. When using the APR/native implementation, the
      OpenSSL style configuration is required as described in the APR/native
      documentation -->
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" maxThreads="200"
           scheme="https" secure="true"
           sslProtocol="TLS"
           keystoreFile="/path/to/keystore"
           keystorePass="password"
           clientAuth="false"
           keyAlias="tomcat"
           sslEnabledProtocols="TLSv1.2,TLSv1.3"/>

将其中的port属性改为80或其他您想要使用的端口号,如下所示:

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="443" maxThreads="200" scheme="https" secure="true" sslProtocol="TLS" keystoreFile="/path/to/keystore" keystorePass="password" clientAuth="false" keyAlias="tomcat" sslEnabledProtocols="TLSv1.2,TLSv1.3"/>

对所有请求都强制使用HTTPS连接,您可以添加以下配置到web.xml文件中:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Entire Application</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

这样,当任何请求都匹配到/*时,客户端将被重定向到HTTPS连接。
访问后失败,需要重新配置server.xml

<Connector port="8088" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true"
           keystoreFile="/path/to/keystore" keystorePass="mystorepassword"
           keyAlias="mycert" keyPass="mykeypassword"
           clientAuth="false" sslProtocol="TLS"
           keyType="RSA"
           sslEnabledProtocols="TLSv1.2,TLSv1.3"
           ciphers="TLS_AES_256_GCM_SHA384,TLS_AES_128_GCM_SHA256"
           truststoreFile="/path/to/truststore" truststorePass="mytruststorepassword" />

由于需要truststore文件,我们根据之前的证书生成,所有的证书文件都保存在tomcat安装的根目录
在这里插入图片描述

keytool -import -trustcacerts -alias tomcat -file ./mycert.crt -keystore ./truststore

然后修改server.xml中内容为下面的内容

<Connector port="8088" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true"
           keystoreFile="/.keystore" keystorePass="tomcat"
           keyAlias="tomcat" keyPass="tomcat"
           clientAuth="false" sslProtocol="TLS"
           keyType="RSA"
           sslEnabledProtocols="TLSv1.2,TLSv1.3"
           ciphers="TLS_AES_256_GCM_SHA384,TLS_AES_128_GCM_SHA256"
           truststoreFile="/truststore" truststorePass="tomcat" />

使用Nginx -t 检查时报错:

2023/04/28 15:21:49 [emerg] 3432360#3432360: cannot load certificate “/usr/local/tomcat/mycert.crt”: PEM_read_bio_X509_AUX() failed (SSL: error:0480006C:PEM routines::no start line:Expecting: TRUSTED CERTIFICATE)

将mycert.crt转换为pem格式

openssl x509 -in mycert.crt -out mycert.pem -outform PEM

转换后在/etc/nginx/conf.d/default中配置

server {
    listen       8070 ssl; 
    server_name  www.domain;# 服务器地址或绑定域名
    ssl_certificate /usr/local/tomcat/mycert.pem;
    ssl_certificate_key /usr/local/tomcat/private.key;
        error_page 404 /var/www/html/error.html;
            error_page 500 /var/www/html/error.html;
        error_page 502 /var/www/html/error.html;
    if ($request_method !~ ^(GET|HEAD|POST)$ ) {
            return 403;
        }
    location / { # 
        root   /usr/local/tomcat/apache-tomcat-10.1.8/webapps;
        index  index.html index.htm index.jsp;
                proxy_pass http://127.0.0.1:8088; # 配置反向代理的ip地址和端口号 【注:url地址需加上http:// 或 https://】
    }
}
sudo service nginx restart

重启成功后waf上上传证书和私钥,提交成功
在这里插入图片描述

此时访问tomcat会出现私密连接提示
在这里插入图片描述
在这里插入图片描述

查看nginx日志,在结合GPT给的答案猜测是配置的ssl版本和加密不一致导致的问题修改nginx中的ssl版本和tomcat中配置的一样
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

配置完成后nginx -t检查没问题后重启nginx和tomcat
在nginx配置文件中有if的话后门要有空格。
配置到最后还是无法正常访问,哪里配置还有点问题,暂时就先不配了吧。后面配完反向代理后猜测可能是反向代理没配好导致的问题,配的匆忙,都是想到哪里配到哪里,所以容易出问题,大家在配置的时候一定要滤清思路。
在这里插入图片描述
暂时就先不配https了,以后有时间再配上,先恢复配置,用Http吧。

恢复配置文件,继续进行安全配置。
1.调整线程池大小

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           maxThreads="200" minSpareThreads="20"/>

3.隐藏版本信息
隐藏版本信息还是建议去用最上面的方法,这里的方法可以尝试。

<Server server.xml="hidden">
  <Service>
    <Connector port="8088" protocol="HTTP/1.1" />
    <Engine server.xml="hidden">
      ...
    </Engine>
  </Service>
</Server>

同时修改错误页面

<error-page>
  <error-code>404</error-code>
  <location>/404.html</location>
</error-page>

tomcat 10.1.8默认目录为webapps/ROOT,所以项目文件也要传到这个目录下才能访问。想来前面的错误有可能我把这个ROOT目录给删除了造成的。

【温馨提示】

【网站搭建之配置tomcat】【网站搭建之配置nginx】【网站搭建之配置apache2】【waf和蜜罐安装】这四篇都是配置过程中边配边加的,所以不会连贯,建议大家安全配置在最后再来配,先配通反向代理,反向代理具体完整过程请看【网站搭建之配置nginx】中的无问题配置,也是最终的配置。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flask开发之环境搭建

目录 1、安装flask 2、创建Flask工程 ​编辑 3、初始化效果 4、运行效果 5、设置Debug模式 6、设置Host 7、设置Port 8、在app.config中添加配置 1、安装flask 如果电脑上从没有安装过flask&#xff0c;则在命令行界面输入以下命令&#xff1a; pip install flask 如果电…

【MFAC】基于偏格式动态线性化的无模型自适应控制(Matlab代码)

例题来源&#xff1a;侯忠生教授的《无模型自适应控制&#xff1a;理论与应用》&#xff08;2013年科学出版社&#xff09;。 &#x1f449;对应书本 4.3 单输入单输出系统(SISO)偏格式动态线性化(PFDL)的无模型自适应控制(MFAC) 上一篇博客介绍了基于紧格式动态线性化的无模型…

C++每日一练:打家劫室(详解动态规划法)

文章目录 前言一、题目二、分析三、代码总结 前言 这题目出得很有意思哈&#xff0c;打劫也是很有技术含量滴&#xff01;不会点算法打劫这么粗暴的工作都干不好。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、题目 题目名称&#xff1a; 打家…

实现Newton方法的最小化函数(pytorch)

首先&#xff0c;我们要明确需求 def newton(theta, f, tol 1e-8, fscale1.0, maxit 100, max_half 20) ● theta是优化参数的初始值的一个向量。 ● f是要最小化的目标函数。该函数应将PyTorch张量作为输入&#xff0c;并返回一个张量。 ● tol是收敛容忍度。 ● fscale 粗…

【Leetcode -328.奇偶链表 - 725.分隔链表】

Leetcode Leetcode -328.奇偶链表Leetcode - 725.分隔链表 Leetcode -328.奇偶链表 题目&#xff1a;给定单链表的头节点 head &#xff0c;将所有索引为奇数的节点和索引为偶数的节点分别组合在一起&#xff0c;然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 &am…

苏州百特电器有限公司网站设计

苏州百特电器有限公司网站设计 五一假期作业企业门户网站布局设计 基于 <div> 的企业门户网站设计 by 小喾苦 我这里仅仅是使用 html css 来实现这个网站的效果&#xff0c;并不是宣传这个网站(现在这个网站已经过时并且无法进入) 实现效果 https://xkk1.github.io/…

出差在外,远程访问企业局域网象过河ERP系统「内网穿透」

文章目录 概述1.查看象过河服务端端口2.内网穿透3. 异地公网连接4. 固定公网地址4.1 保留一个固定TCP地址4.2 配置固定TCP地址 5. 使用固定地址连接 转载自远程穿透文章&#xff1a;公网远程访问公司内网象过河ERP系统「内网穿透」 概述 ERP系统对于企业来说重要性不言而喻&am…

初识中央处理器CPU

目录 一、CPU功能 1.控制器功能 2.运算器功能 3.功能执行顺序 4.其他功能 二、CPU结构图 1.CPU与系统总线 2.CPU内部结构 3.运算器中的寄存器组 4.控制器中的寄存器组 三、执行指令的过程 1.指令周期的基本概念 2.完整的指令周期流程 3.数据通路 4.指令周期的数据…

React超级简单易懂全面的有关问题回答(面试)

目录 React事件机制&#xff1a; 2、React的事件和普通的HTML有什么不同&#xff1a; - 事件命名的规则不同&#xff0c;原生事件采用全小写&#xff0c;react事件采用小驼峰 3、React组件中怎么做事件代理&#xff1f;他的原理是什么&#xff1f; 4、React高阶组件、Rend…

【SpringBoot】 整合RabbitMQ 保证消息可靠性传递

生产者端 目录结构 导入依赖 修改yml 业务逻辑 测试结果 生产者端 目录结构 导入依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency>&…

无人机集群路径规划:淘金优化算法(Gold rush optimizer,GRO)提供MATLAB代码

一、淘金优化算法GRO 淘金优化算法&#xff08;Gold rush optimizer&#xff0c;GRO&#xff09;由Kamran Zolf于2023年提出&#xff0c;其灵感来自淘金热&#xff0c;模拟淘金者进行黄金勘探行为。 参考文献&#xff1a; K. Zolfi. Gold rush optimizer: A new population-ba…

Python小姿势 - #### Python技术博客:Python多线程编程

Python技术博客&#xff1a;Python多线程编程 你好&#xff0c;这里是自媒体技术博主Aurora&#xff0c;今天我想分享一下Python多线程编程。 首先&#xff0c;什么是多线程编程&#xff1f;多线程编程是一种让多个线程同时执行的编程方式&#xff0c;它可以让程序的执行更加高…

2023年华中杯C题计算结果

经过一晚上代码的编写&#xff0c;论文的写作&#xff0c;C题完整版论文已经发布&#xff0c; 注&#xff1a;蓝色字体为说明备注解释字体&#xff0c;不能出现在大家的论文里。黑色字体为论文部分&#xff0c;大家可以根据红色字体的注记进行摘抄。对应的详细的写作视频教程&…

推荐一款网站内链爬取python脚本

目标 使用 web-tools 提供的webSpider来爬取网站内链&#xff0c;并且将其导出。 webSpider介绍&#xff1a; 官网链接&#xff1a;https://web-tools.cn/web-spider 仓库地址&#xff1a;https://github.com/duerhong/web-spider Web Spider 专门用于爬取网站内链&#xf…

C++ srand()和rand()用法

参考C rand 与 srand 的用法 计算机的随机数都是由伪随机数&#xff0c;即是由小M多项式序列生成的&#xff0c;其中产生每个小序列都有一个初始值&#xff0c;即随机种子。&#xff08;注意&#xff1a; 小M多项式序列的周期是65535&#xff0c;即每次利用一个随机种子生成的随…

论文学习笔记:Transformer Attention Is All You Need

Transformer: Attention Is All You Need 2022 年年底&#xff0c;一个大语言模型 ChatGPT 横空出世&#xff0c;并且迅速点燃了普罗大众对 AI 的热情&#xff0c;短短两个月&#xff0c; ChatGPT 就成为了史上最快成为上亿月活的应用&#xff0c;并且持续受到关注&#xff0c…

【Vue2.0源码学习】变化侦测篇-Object的变化侦测

文章目录 1. 前言2. 使Object数据变得“可观测”3. 依赖收集3.1 什么是依赖收集3.2 何时收集依赖&#xff1f;何时通知依赖更新&#xff1f;3.3 把依赖收集到哪里 4. 依赖到底是谁5. 不足之处6. 总结 1. 前言 我们知道&#xff1a;数据驱动视图的关键点则在于我们如何知道数据发…

记录docker swarm的使用

在前面的几篇文章中我们依次学习了dockerfile、docker-compose的使用&#xff0c;接下来是docker有一个比较 重要的使用&#xff0c;docker swarm的使用&#xff0c;与dockerfile和docker-compose相比较而言&#xff0c;docker swarm是在 多个服务器或主机上创建容器集群服务准…

Leetcode——66. 加一

&#x1f4af;&#x1f4af;欢迎来到的热爱编程的小K的Leetcode的刷题专栏 文章目录 1、题目2、暴力模拟(自己的第一想法)3、官方题解 1、题目 给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。最高位数字存放在数组的首位&#xff0c; 数组…

CTF-PHP反序列化漏洞2-典型题目

作者&#xff1a;Eason_LYC 悲观者预言失败&#xff0c;十言九中。 乐观者创造奇迹&#xff0c;一次即可。 一个人的价值&#xff0c;在于他所拥有的。可以不学无术&#xff0c;但不能一无所有&#xff01; 技术领域&#xff1a;WEB安全、网络攻防 关注WEB安全、网络攻防。我的…