Apache Tomcat 強化和安全指南
已發表: 2015-02-14使用最佳實踐強化和保護 Apache Tomcat 服務器的實用指南。
Tomcat 是最流行的 Servlet 和 JSP 容器服務器之一。 它被以下一些高流量網站使用:
- LinkedIn.com
- Dailymail.co.uk
- 康卡斯特網
- 沃爾瑪網
- 路透社
- Meetup.com
- 網站
下圖展示了Tomcat在Java應用服務器中的市場地位。

從技術上講,您可以使用 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.
Connector port
部分下的 xml 文件。
SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
使用您的更改密鑰庫文件名和密碼。
如果您需要有關密鑰庫和 CSR 流程的幫助,請參閱本指南。
強制 HTTPS
這僅在您啟用 SSL 時適用。 如果沒有,它將破壞應用程序。
啟用 SSL 後,最好將所有 HTTP 請求強制重定向到 HTTPS,以確保用戶與 Tomcat 應用程序服務器之間的安全通信。
- 轉到 $tomcat/conf 文件夾
- 使用
vi
修改web.xml
- 在
</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。 這是一個注入響應頭的標誌。

這是通過在 web.xml 文件的session-config
部分的行下方添加來完成的
<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> <頭部> <title>錯誤頁面</title> </head> <body> 這是一個錯誤! </正文> </html>
- 轉到 $tomcat/conf 文件夾
- 在 web.xml 文件中添加以下內容。 確保在
</web-app>
語法之前添加
<錯誤頁面> <錯誤代碼>404</錯誤代碼> <location>/error.jsp</location> </錯誤頁面> <錯誤頁面> <錯誤代碼>403</錯誤代碼> <location>/error.jsp</location> </錯誤頁面> <錯誤頁面> <錯誤代碼>500</錯誤代碼> <location>/error.jsp</location> </錯誤頁面>
- 重啟tomcat服務器測試一下

好多了!
您也可以對java.lang.Exception
執行此操作。 如果有任何 java lang 異常,這將有助於不公開 tomcat 版本信息。
只需在web.xml
中添加以下內容並重新啟動 tomcat 服務器。
<錯誤頁面> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </錯誤頁面>
我希望上面的指南能給你一個保護 Tomcat 的想法。 如果您想了解有關 Tomcat 管理的更多信息,請查看此在線課程。
此外,在此處了解如何配置 WAS 以在關機期間停止詢問密碼。