Tomcat容器管理安全的验证方式汇总_Tomcat

当访问服务器中受保护的资源时,容器管理的验证方法可以控制确认用户身份的方式。Tomcat支持四种容器管理的安全防护,它们是:

1、BASIC(基本验证):通过HTTP验证,需要提供base64编码文本的用户口令

2、DIGEST(摘要验证):通过HTTP验证,需要提供摘要编码字符串的用户口令

3、FORM(表单验证):在网页的表单上要求提供密码

4、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密码。方式有两种,正如官网描述:

Tomcat,容器管理,安全验证

方式一:用代码来生成:

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权威指南(第二版)》的步骤做的,之前试了很久都不知道为什么登录不了,结果在官网找到答案,是这么描述的:

 Tomcat,容器管理,安全验证

大意是说,如果使用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页面:

输入正确的账号和密码,跳转至受保护的页面:

客户端证书验证

待续
 
Demo下载:

链接: http://pan.baidu.com/s/1gfnqVdT 密码: pubw

参考页面:

https://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html

时间: 2024-08-03 21:29:18

Tomcat容器管理安全的验证方式汇总_Tomcat的相关文章

DevOps的支撑服务:K8s容器管理与应用部署

本文讲的是DevOps的支撑服务:K8s容器管理与应用部署,大家好,本期微课堂介绍在新一代数字化企业云平台中对于Kubernetes的学习以及使用的总结. 本次分享分为两部分: 1.介绍Kubernetes是什么以及一些基本概念 2.介绍在新一代数字化企业云平台里如何使用Kubernetes,以及遇到的一些问题. 首先开始第一部分: Kubernetes项目是2014年由Google公司启动的,是Google公司在15年生产环境经验基础上 ,结合了社区的一些优秀点子和实践而构建的. Kubern

CoreOS实践指南(七):Docker容器管理服务

注:本文首发于CSDN,转载请标明出处. [编者按]在"漫步云端:CoreOS实践指南"系列的前几篇文章中,ThoughtWorks的软件工程师林帆主要介绍了CoreOS及其相关组件和使用.说到CoreOS,不得不提Docker.当Docker还名不见经传的时候,CoreOS创始人Alex就凭着敏锐直觉,预见了这个项目的价值,将Docker做为了这个系统支持的第一套应用程序隔离方案.本文将主要介绍在具体的场景下,如何在CoreOS中恰当的管理Docker容器. 作者简介: 林帆,生在8

ASP.NET七大身份验证方式及解决方案

在B/S系统开发中,经常需要使用"身份验证".因为web应用程序非常特殊,和传统的C/S程序不同,默认情况下(不采用任何身份验证方式和权限控制手段),当你的程序在互联网/局域网上公开后,任何人都能够访问你的web应用程序的资源,这样很难保障应用程序安全性.通俗点来说:对于大多数的内部系统.业务支撑平台等而言,用户必须登录,否则无法访问和操作任何页面.而对于互联网(网站)而言,又有些差异,因为通常网站的大部分页面和信息都是对外公开的,只有涉及到注册用户个人信息的操作,或者网站的后台管理等

浅谈ASP.NET的权限管理和用户验证

asp.net 网站建设中,会碰到最常用的用户管理及操作权限设置验证,虽然这是很常见的一个管理操作,但要做得完善很不容易.最近参考了许多.NET方面的书,特别关心这方面的,并结合自己特点,摸索了一下适合自己的用户管理方法,完成了基本管理类库. 用户的管理方法,在设计时采取"用户--角色--许可"三级,这是WINDOWS操作系统的用户管理方法.一个用户可以有多个角色,一个角色也可以有多个许可. 所以有数据库设计时分别设计: 用户表:设UserID.用户名.用户信息 角色表:设RoleID

asp.net中常用的几种身份验证方式

前言 在B/S系统开发中,经常需要使用"身份验证".因为web应用程序非常特殊,和传统的C/S程序不同,默认情况下(不采用任何身份验证方式和权限控制手段),当你的程序在互联网/局域网上公开后,任何人都能够访问你的web应用程序的资源,这样很难保障应用程序安全性.通俗点来说:对于大多数的内部系统.业务支撑平台等而言,用户必须登录,否则无法访问和操作任何页面.而对于互联网(网站)而言,又有些差异,因为通常网站的大部分页面和信息都是对外公开的,只有涉及到注册用户个人信息的操作,或者网站的后台

Mesos将使用统一的容器管理器支持多种容器类型

本文讲的是Mesos将使用统一的容器管理器支持多种容器类型,[编者的话]本文介绍了Mesos即将发布的一个新的功能,即使用统一的容器管理器来支持多种容器类型.包含了实现此功能的原因.能为Mesos用户带来的益处.发布的时间表和用户在使用此功能时应该注意的问题等. Apache Mesos从2014年年底开始支持Docker作为其缺省容器类型的替代品,但是现在这个流行的集群调度平台已经接近完成一个更简单的方式意在替换现在已经存在的两种容器方式,以简化其未来的框架开发工作. 除了这个目的之外,这个"

asp.net身份验证方式介绍_实用技巧

windows身份验证: IIS根据应用程序的设置执行身份验证.要使用这种验证方式,在IIS中必须禁用匿名访问. Forms验证:用Cookie来保存用户凭证,并将 未经身份验证的用户重定向到自定义的登录页. Passport验证:通过Microsoft的集中身份验证服务执行的,他为成员站点提供单独登录 和核心配置文件服务. 一. 配置windows身份验证 1)配置IIS设置 2)设置Web.config <system.web> <authentication mode = &quo

身份验证方式转变:密码验证已成过去式

本文讲的是身份验证方式转变:密码验证已成过去式,在信息时代,确保我们个人信息的隐私性是非常重要的.此外,确保公司数据的安全性也很重要.本文将讨论你和你的企业应该采取怎样的步骤利用双因素身份验证来保护个人信息和公司数据. 信息时代让数十亿人的信息处于网络盗窃的威胁之中.数百万的用户使用社交网站(如Facebook.Myspace和Twitter等),人们自愿地使用这些网站,并将各种个人信息贴在上面给大家看.突然间,我们有机会查看从未联系过的陌生人的资料,这既有其优势,更是有很多劣势,一旦这些信息落

容器管理创业公司Rancher Labs获1000万美元融资

本文讲的是容器管理创业公司Rancher Labs获1000万美元融资,[编者的话]容器市场已经越来越被资本市场所认同,相信未来会有更多的初创公司从不同技术角度杀入到这个大的市场中来,而Ranche Labs是最近关注比较多的一家公司.他们通过开发一个轻量级的Linux操作系统以及在它之上运行的一套容器管理工具--彻底改变了传统的虚拟机运行方式--刚刚声称今天获得了1000万美金的融资. 上图是在用Rancher来管理跨数据中心跨服务器集群管理Docker容器的界面截图 Rancher Labs