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