转自:https://my.oschina.net/itblog/blog/678845
当访问服务器中受保护的资源时,容器管理的验证方法可以控制确认用户身份的方式。Tomcat支持四种容器管理的安全防护,它们是:
- BASIC(基本验证):通过HTTP验证,需要提供base64编码文本的用户口令
- DIGEST(摘要验证):通过HTTP验证,需要提供摘要编码字符串的用户口令
- FORM(表单验证):在网页的表单上要求提供密码
- CLIENT-CERT(客户端证书验证):以客户端证书来确认用户的身份
基本验证
当web.xml文件中的auth-method元素设置为BASIC时,表明应用使用的是基本验证,每次浏览器请求受保护的Web应用资源时,Tomcat都会使用HTTP基本验证向浏览器索取用户名和密码(以页面弹窗的方式)。使用这种验证方法,所有的密码都会以base64编码的文本在网络上传输。
先看下项目结构(我用Maven管理的依赖):
其中,protect/protect.jsp是被保护的,需要授权访问。
说明:本文提到的tomcat-users.xml,server.xml等文件,如果是在Eclipse中启动tomcat,则这些文件在Eclipse中的Servers工程下对应的tomcat下,如图:
而本文提到的web.xml是指项目自己的web.xml,而非Servers项目下Tomcat中的web.xml。
web.xml
<security-constraint>
<web-resource-collection>
<http-method>GET</http-method>
<web-resource-name>tomcat protect page</web-resource-name>
<!-- /protect目录下的所有资源是受保护的 -->
<url-pattern>/protect/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<!-- 这里的member要与tomcat-user.xml中配置的role一致 -->
<role-name>member</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<!-- 验证方式,可选的值为: "BASIC", "DIGEST", "FORM", "CLIENT-CERT" -->
<auth-method>BASIC</auth-method>
<!-- 使用的Realm名字,注意这里不能有空格 -->
<realm-name>MyConstraints</realm-name>
</login-config>
tomcat-user.xml(注意如果是在Eclipse中启动tomcat,这个tomcat-user.xml在Eclipse中的Servers工程下)
<role rolename="member"/>
<!-- member角色下有一个叫alvis的用户,密码为pwd -->
<user username="alvis" password="pwd" roles="member"/>
重启tomcat后,访问protect目录下的资源,情况是这样的:
输入账户alvis,密码pwd后,访问成功(当然,非protect目录下的资源是可以直接访问的):
摘要验证
当web.xml文件中的auth-method元素设置为DIGEST时,表明应用使用的是摘要验证。还是上面的例子,看配置:
web.xml和基本验证一样,只是auth-method修改为DIGEST,此处不赘述。
server.xml中的UserDatabaseRealm(如果tomcat使用的是其他Realm,也一样的)里增加digest属性:
接下来,要生成tomcat可识别的MD5密码。方式有两种,正如官网描述:
To calculate the digested value of a cleartext password, two convenience techniques are supported:
- If you are writing an application that needs to calculate digested passwords dynamically, call the static
Digest()
method of theorg.apache.catalina.realm.RealmBase
class, passing the cleartext password and the digest algorithm name as arguments. This method will return the digested password.- If you want to execute a command line utility to calculate the digested password, simply execute
and the digested version of this cleartext password will be returned to standard output.
CATALINA_HOME/bin/digest.[bat|sh] -a {algorithm} {cleartext-password}
方式一:用代码来生成:
import org.apache.catalina.realm.RealmBase;
public class T {
public static void main(String[] args) {
//参数1:要加密的字符串;参数2:加密算法;参数3:字符串的编码
String base = RealmBase.Digest("alvis:MyConstraints:pwd", "MD5", null);
System.out.println(base);
}
}
由于RealmBase类在catalina.jar包中,如果项目中没有这个类,可在项目上右键-->Java Build Path--> Libraries-->Add Library-->选择Server Runtime-->选择Apache Tomcat V8.0(其实7.0也行),如图:
方式二:用脚本来生成:
在tomcat/bin目录下有个digest.sh(Linux系统)或digest.bat(Windows系统)脚本,运行这个脚本,传入摘要算法和参数即可,这里我在Windows系统上运行,如图:
这里的-a指定摘要算法为MD5,要特别注意这里的参数是:{用户名}:{Realm名}:{密码明文}。用户名就是tomcat-users.xml中配置的<user>名字(这里为alvis),Realm名是在web.xml中配置的<realm-name>(这里为MyConstraints),密码明文即该用户用于登录的密码(我这里设为pwd)。
只有这样的参数加密后的密码,在tomcat-users.xml中配置才有效,否则是登录不了的。由于我是参考《Tomcat权威指南(第二版)》的步骤做的,之前试了很久都不知道为什么登录不了,结果在官网找到答案,是这么描述的:
If using digested passwords with DIGEST authentication, the cleartext used to generate the digest is different and the digest must use the MD5 algorithm. In the examples above
{cleartext-password}
must be replaced with{username}:{realm}:{cleartext-password}
. For example, in a development environment this might take the formtestUser:Authentication required:testPassword
. The value for{realm}
is taken from the<realm-name>
element of the web application's<login-config>
. If not specified in web.xml, the default value ofAuthentication required
is used.
大意是说,如果使用DIGEST方式验证,用于生成摘要的明文必须被替换为这种格式。实践出真知,所以还是不能完全看书啊,动手实践才是实在的。
然后就是在tomcat-users.xml中配置生成的密码(通过下方的截图,可以比较password跟上方digest.bat脚本生成的密码是否一致):
之后重启tomcat,效果自然是跟使用基本验证的效果一样了。
表单验证
当web.xml文件中的auth-method元素设置为FORM时,表明应用使用的是表单验证。当用户请求Web应用程序受保护的资源时,表单验证会跳转至配置的登录页面。当登录失败时,还需要一个验证失败的页面,还是上面的例子,看配置:
web.xml
<security-constraint>
<web-resource-collection>
<http-method>GET</http-method>
<web-resource-name>tomcat member part</web-resource-name>
<url-pattern>/protect/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>member</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>MyConstraints</realm-name>
<form-login-config>
<form-login-page>/form/login.html</form-login-page>
<form-error-page>/form/error.html</form-error-page>
</form-login-config>
</login-config>
这里的form/login.html是用于登录的页面,而form/error.html则是验证失败后跳转到的页面(这两个页面在上方的工程结构图中已经有了)。
login.html
<html>
<body>
<h2>Login Page.</h2>
<form method="post" action="j_security_check" name="loginForm">
<input type="text" name="j_username" /><br>
<input type="password" name="j_password" /><br>
<input type="submit" value="Login" />
</form>
</body>
</html>
注意:这里form的action="j_security_check",账号的name="j_username"和密码的name="j_password"都是不可变的,否则配置的验证规则不起作用。
server.xml中,要去掉Realm中添加的“digest=MD5”这个属性:
tomcat-users.xml中使用明文保存密码:
效果(仅在访问protect目录下的资源时才出现Login Page):
输入错误的账号和密码,跳转至form/error.html页面:
输入正确的账号和密码,跳转至受保护的页面:
客户端证书验证
原作者到这里就没写,待续了
相关推荐
Java Authentication and Authorization Service (JAAS) 是Java平台的核心组件,用于提供安全的用户认证和权限管理。在Mac版Tomcat中配置JAAS,可以确保只有经过验证的用户才能访问Web应用程序,从而增强系统的安全...
Apache Tomcat的安全配置主要涉及到以下几个方面:用户认证、访问控制、安全策略等。这些配置通常是在`conf`目录下的`tomcat-users.xml`和`web.xml`文件中完成的。 #### 二、用户认证配置 用户认证是Tomcat安全...
8. **安全**:Tomcat支持多种安全特性,如SSL/TLS加密、用户认证和授权,以及角色基的安全管理。开发者可以通过修改配置文件来实施安全策略。 源码分析部分可能包括Tomcat的启动过程、请求处理流程、线程池管理、...
7. **安全性**:Tomcat7引入了更强的安全性特性,如SSL/TLS支持,用户认证和授权,以及对跨站脚本攻击和SQL注入的防护。 8. **性能优化**:Tomcat7对线程池、连接器和JVM调优等方面进行了优化,提升了服务器性能。 ...
4. **安全配置**:如何通过源代码理解Tomcat的安全机制,如角色认证、访问控制和SSL/TLS支持。 5. **部署与热部署**:理解部署描述符(web.xml)的解析过程,以及如何实现在不重启服务器的情况下更新应用程序。 6....
部署Web应用至Tomcat 5.5.12,通常有以下几种方式: 1. 直接将WAR文件复制到`webapps`目录下,Tomcat会自动解压并部署。 2. 将应用的目录结构放到`webapps`下,Tomcat同样会识别并启动应用。 3. 使用`conf/Catalina...
7. **安全配置**:Tomcat提供了全面的安全管理机制,包括角色认证、访问控制、SSL/TLS加密等,这些配置都在server.xml等配置文件中定义。 8. **部署与热更新**:Tomcat支持WAR文件部署和热更新,使得开发者能够在不...
5. **安全性**:Tomcat 5.5.29提供了用户认证和授权机制,通过conf/tomcat-users.xml配置用户和角色,以及在web应用的WEB-INF/web.xml中定义访问限制。 6. **连接器与线程池**:Tomcat使用不同的连接器(比如Coyote...
2. **容器结构**:Tomcat采用了一种基于容器的层次结构,包括Engine(引擎)、Host(主机)、Context(上下文)和Wrapper(封装器)。每个级别都包含一个或多个下一级别的容器,从而实现多应用、多域名的部署。 3. ...
它还加强了安全性,提供了一种更灵活的角色管理和认证机制。 在压缩包中,我们看到了两个Apache Tomcat 7的版本——7.0.19和7.0.62。这些版本之间的差异主要是安全修复和性能优化。例如,7.0.62是7.0.x系列的一个较...
5. **安全性**:Tomcat提供了安全角色管理和认证机制,如SSL/TLS支持,可以通过`server.xml`配置来实现HTTPS连接,保护传输数据的安全。 6. **部署与管理**:开发者可以将打包好的WAR文件直接放入`webapps`目录,...
6. **安全管理**:Tomcat 8增强了安全管理,包括角色基础的访问控制(RBAC)和基于容器的安全性,允许更精细的权限设置和用户认证。 7. **配置改进**:Tomcat 8的配置文件结构更加清晰,易于理解和管理。例如,...
7. **安全管理**: Tomcat提供了多种安全措施,如角色基的安全认证( Realm),SSL/TLS支持,以及防火墙规则等,以保护Web应用免受攻击。管理员需要正确配置这些设置以确保应用安全。 8. **部署Web应用**: 用户可以...
5. **安全管理**:Tomcat提供了安全配置选项,包括基本认证、Digest认证、SSL/TLS加密和角色基于的安全控制,以保护Web应用免受未授权访问。 6. **性能优化**:64位版本的Tomcat能够处理更大的数据量,利用更多的...
Tomcat 7支持角色基的安全认证,可以在`conf/tomcat-users.xml`中定义用户和角色,然后在`web.xml`中配置受保护的URL。还可以通过修改`conf/server.xml`中的`<Realm>`元素来配置不同的身份验证机制,如文件系统、...
8. **安全与权限管理**:Tomcat提供了多种安全特性,包括用户认证、角色授权等。理解这些安全机制对于构建安全的Web应用至关重要。 9. **性能优化**:Tomcat可以通过调整各种参数进行性能优化,如增大最大连接数、...
Tomcat支持多种部署方式,包括手动部署(将WAR文件放入`webapps`目录)、通过管理控制台(如`manager`应用)在线部署以及通过Context配置文件部署。此外,Tomcat还提供了丰富的管理工具,如`bin`目录下的`startup.sh...
9. **安全配置**:Tomcat提供了丰富的安全配置选项,包括SSL/TLS加密、用户认证、角色权限控制等,以确保Web应用的安全性。 源码部分则提供了Tomcat的内部实现细节,对于开发者来说,可以通过阅读源码更直观地理解...
Tomcat 4.1.31在安全方面进行了增强,支持HTTPS协议和SSL/TLS加密,可以配置访问控制、认证和授权策略。此外,Tomcat提供了一套管理工具,如Manager应用,用于部署、启动、停止和重新加载Web应用程序。 七、性能...
Tomcat提供了多种安全机制,如SSL/TLS支持、用户认证、角色授权、会话管理等。通过`web.xml`配置文件,可以定义安全约束、设置访问控制和密码策略。 ### 4. Tomcat的部署和管理 Tomcat支持热部署,即在不重启...