网站搭建之配置tomcat

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

【安全配置】

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】中的无问题配置,也是最终的配置。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值