Tomcat 是最流行的 Servlet 和 JSP 容器服务器之一。它被以下一些高流量网站使用:

  • LinkedIn.com
  • Dailymail.co.uk
  • Comcast.net
  • Wallmart.com
  • Reuters.com
  • Meetup.com
  • Webs.com

下图展示了Tomcat在Java应用服务器中的市场地位。

资料来源:Plumbr

从技术上讲,您可以使用 Tomcat 作为前端服务器来直接服务站点请求。但是,在生产环境中,您可能希望使用一些 Web 服务器(如 Apache、Nginx)作为前端来将请求路由到 Tomcat。

使用 Web 服务器处理请求可以带来性能安全优势。如果您使用 Apache HTTP 作为前端 Web 服务器,那么您还必须考虑保护它。

拥有默认的 Tomcat 配置可能会暴露敏感信息,这有助于黑客为攻击应用程序做好准备。

以下是在 Tomcat 7.x、UNIX 环境下测试的。

观众

这是为中间件管理员、应用程序支持、系统分析师或任何工作或渴望学习 Tomcat 强化和安全的人设计的。

必须具备良好的 Tomcat 和UNIX 命令知识。

笔记

我们需要一些工具来检查 HTTP 标头以进行验证。有两种方法可以做到这一点。

如果测试面向 Internet 的应用程序,那么您可以使用以下 HTTP 标头工具来验证实现。

  • HTTP 标头检查器
  • 黑客目标

对于Intranet 应用程序,您可以使用 Google Chrome、Firefox 开发工具。

作为最佳实践,您必须对要修改的任何文件进行备份

在本指南中,我们将 Tomcat 安装文件夹称为$tomcat 。

让我们来看看硬化和固定程序。

删除服务器横幅

从 HTTP 标头中删除服务器标语是强化的首要任务之一。

使用服务器横幅会暴露您正在使用的产品和版本,并导致信息泄露漏洞。

默认情况下,由 Tomcat 提供的页面将显示如下。

让我们从 Server 标头中隐藏产品和版本详细信息。

  • 转到 $tomcat/conf 文件夹
  • 使用 vi 修改 server.xml
  • 将以下内容添加到Connector port
Server =""
示例:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
Server =" "
redirectPort="8443" />
  • 保存文件并重新启动 Tomcat。现在,当您访问应用程序时,您应该会看到 Server 标头的空白值。

使用安全管理器启动 Tomcat

安全管理器保护您免受浏览器中运行的不受信任的小程序的侵害。

使用安全管理器运行 Tomcat 比不使用安全管理器要好。Tomcat 有关于Tomcat 安全管理器的优秀文档。

这样做的好处是您不需要更改任何配置文件。这只是您执行startup.sh文件的方式。

你所要做的就是用–security 参数启动tomcat。

[root@geekflare bin]# ./startup.sh -security
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Using Security Manager
Tomcat started.
[root@geekflare bin]#

启用 SSL/TLS

通过 HTTPS 提供 Web 请求对于保护客户端和 Tomcat 之间的数据至关重要。为了使您的 Web 应用程序可以通过 HTTPS 访问,您需要实现 SSL 证书。

假设您已经准备好带有证书的密钥库,您可以在部分server.下的 xml 文件中添加以下行Connector port

SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"

使用您的更改密钥库文件名和密码。

如果您需要有关密钥库和 CSR 流程的帮助,请参阅本指南。

强制 HTTPS

这仅在您启用 SSL 时适用。如果没有,它将破坏应用程序。

启用 SSL 后,最好将所有 HTTP 请求强制重定向到 HTTPS,以确保用户与 Tomcat 应用程序服务器之间的安全通信。

  • 转到 $tomcat/conf 文件夹
  • web.xml使用修改vi
  • </web-app>在语法之前添加以下内容
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Context</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
  • 保存文件并重启Tomcat

将 Secure & HttpOnly 标志添加到 Cookie

在没有安全 cookie 的情况下,可能会窃取或操纵 Web 应用程序会话和 cookie。这是一个注入响应头的标志。

这是通过在session-configweb.xml 文件部分的行下方添加来完成的

<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>

配置截图:

保存文件并重新启动 Tomcat 以检查 HTTP 响应标头。

从非特权帐户运行 Tomcat

最好为 Tomcat 使用单独的非特权用户。这里的想法是保护其他运行的服务,以防任何帐户受到损害。

  • 创建一个 UNIX 用户,比如说 tomcat
useradd tomcat
  • 如果正在运行,请停止 Tomcat
  • 将 $tomcat 所有权更改为用户 tomcat
chown -R tomcat:tomcat tomcat/

启动 Tomcat 并确保它以 tomcat 用户运行

删除默认/不需要的应用程序

默认情况下,Tomcat 附带以下 Web 应用程序,在生产环境中可能需要也可能不需要。

您可以删除它们以保持干净并避免 Tomcat 默认应用程序的任何已知安全风险。

  • ROOT - 默认欢迎页面
  • 文档 – Tomcat 文档
  • 示例 – 用于演示的 JSP 和 servlet
  • Manager, host-manager – Tomcat 管理

它们位于 $tomcat/webapps 文件夹下

[root@geekflare webapps]# ls -lt
drwxr-xr-x 14 tomcat tomcat 4096 Sep 29 15:26 docs
drwxr-xr-x 7 tomcat tomcat 4096 Sep 29 15:26 examples
drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 host-manager
drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 manager
drwxr-xr-x 3 tomcat tomcat 4096 Sep 29 15:26 ROOT
[root@geekflare webapps]#

更改 SHUTDOWN 端口和命令

默认情况下,tomcat 配置为在 8005 端口上关闭。

你知道你可以通过远程登录到 IP: 端口并发出 SHUTDOWN 命令来关闭 tomcat 实例吗?

Chandans # telnet localhost 8005
Trying ::1... telnet:
connect to address ::1:
Connection refused Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SHUTDOWN Connection closed by foreign host.
Chandans #

危险的!

您会看到,使用默认配置会导致高安全风险。

建议将 tomcat 关闭端口和默认命令更改为不可预测的内容。

  • 在 server.xml 中修改以下内容
<Server port="8005" shutdown="SHUTDOWN">

8005 - 更改为其他一些未使用的端口

SHUTDOWN - 改变一些复杂的东西

示例:

<Server port="8867" shutdown="NOTGONNAGUESS">

替换默认的 404、403、500 页面

具有未找到、禁止、服务器错误的默认页面会公开版本详细信息。

让我们看一下默认的 404 页面。

为了缓解,您可以先创建一个一般错误页面,然后配置 web.xml 以重定向到一般错误页面。

  • 转到 $tomcat/webapps/$application
  • vi使用编辑器创建一个 error.jsp 文件
<html>
<head>
<title>Error Page</title>
</head>
<body> That's an error! </body>
</html>
  • 转到 $tomcat/conf 文件夹
  • 在 web.xml 文件中添加以下内容。</web-app>确保在语法之前添加
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
  • 重启tomcat服务器测试一下

好多了!

你也可以这样做java.lang.Exception。如果有任何 java lang 异常,这将有助于不公开 tomcat 版本信息。

只需添加以下内容web.xml并重新启动 Tomcat 服务器。

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

我希望上面的指南能给你一个保护 Tomcat 的想法。

Apache Tomcat 强化和安全指南相关推荐

  1. Apache Tomcat 安全性指南

    Apache Tomcat 在安全性方面拥有令人印象深刻的记录.根据官方 Apache Tomcat Wiki Pages,从未报告过由于对任何 Apache Tomcat 实例的恶意攻击而导致实际损 ...

  2. Apache Tomcat 9 用户指南

    Apache Tomcat 9  Apache Tomcat9 版本9.0.14, 2018年12月6日 这是Apache Tomcat Servlet / JSP容器的文档包的顶级入口点 .的Apa ...

  3. 在 Apache Tomcat 服务器上启用 HTTPS 或 SSL 正确方式的分步指南 – 端口 8443

    我开始使用Apache Tomcat已经快 12 年了.我相信当我做我的一年级项目时,它是在 Tomcat 版本上1.x.现在它已经在 version 上8.0.在我的日常工作生活中,我大部分时间都在 ...

  4. Dock避坑指南(一):源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示 Apache Tomcat | 端口是通的无法访问tomcat

    错误描述 类型 状态报告 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示. Apache Tomcat/10.0.14 首先恭喜你,看到这个界面说明Tomcat是OK的,只是 ...

  5. 使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务

    http://www.ibm.com/developerworks/cn/web/wa-aj-tomcat/ 使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务 Y ...

  6. Apache Tomcat 5.5 Servlet/JSP 容器

    http://www.jaxmao.org/tomcat-docs/index.html Apache Tomcat 5.5 Servlet/JSP 容器 链接 文档首页 中文用户论坛 常见问题 用户 ...

  7. windows上Apache+tomcat实现主备机服务器

    转自:http://m.blog.csdn.net/article/details?id=47043559 今天配置了windows下Apache+tomcat实现的服务器配置,主要实现的功能如下: ...

  8. Apache Tomcat 7.0.93 发布,开源 Java Web 应用服务器

    Apache Tomcat 7.0.93 已发布,Tomcat 是 Java Servlet.JavaServer Pages.Java 表达式语言和 Java WebSocket 技术的开源实现,是 ...

  9. apache+tomcat 搭建负载均衡系统

    apache+tomcat+mod_jk 搭建负载均衡系统. 0.os系统采用centos6.8 x64 2.6.32-642.el6.x86_64 1.首先安装好jdk环境本次采用jdk-8u111 ...

最新文章

  1. 一种清除windows通知区域“僵尸”图标的方案——XP系统解决方案
  2. 【思维导图】利用LSTM(长短期记忆网络)来处理脑电数据
  3. UVa1588 - Kickdown
  4. 标准化条件变量 -- condition_variable
  5. 收集的安全网站【公司】
  6. SpringBoot2.0实现静态资源版本控制
  7. 天弘余额宝4月10日起全面解除限购,你还会选择天弘余额宝吗?
  8. LeetCode 384. 打乱数组(rand)
  9. 太棒了!8 个流行的 Python 可视化工具包,你喜欢哪个?
  10. 暴力 Codeforces Round #183 (Div. 2) A. Pythagorean Theorem II
  11. 利用SAN做数字化世界的基石
  12. Servlet多线程机制
  13. Nginx中保持长连接的配置 - 运维记录
  14. Java:计算立方体的体积和底面积
  15. 如何监控Tuxedo中间件?Oralce TUXEDO监控方案
  16. 初学“深入浅出MFC”之(一)
  17. 杭电 1142 十字链表存储
  18. NovacoBridge 软件在电子海图更新中的应用
  19. 载波与载波频率,中心频率的解释
  20. php 验证码一直不对,php验证码错误

热门文章

  1. php处理预占库存,装配类产品排单研究 — 库存,在制和预占
  2. 华为鸿蒙手机系统什么时候开始更新_华为鸿蒙系统什么时候出!华为EMUI10.1再更新HMS战略方向如何?...
  3. douyin uid转sec_uid
  4. Linux还原主配置命令,使用Dconf备份和还原Linux桌面系统设置
  5. ubuntu下载网易云出现错误
  6. 漫谈同源策略(SOP)和跨域资源共享(CORS)
  7. redis数据结构介绍
  8. VC控件MSComm编写串口通信程序
  9. 你永远不知道,孩子的下一句话能有多出其不意!
  10. 启用 WebLogic Server 域之间的信任