web server apache tomcat11-07-Realm Configuration

2024-04-18 13:12

本文主要是介绍web server apache tomcat11-07-Realm Configuration,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

整理这个官方翻译的系列,原因是网上大部分的 tomcat 版本比较旧,此版本为 v11 最新的版本。

开源项目

从零手写实现 tomcat minicat 别称【嗅虎】心有猛虎,轻嗅蔷薇。

系列文章

web server apache tomcat11-01-官方文档入门介绍

web server apache tomcat11-02-setup 启动

web server apache tomcat11-03-deploy 如何部署

web server apache tomcat11-04-manager 如何管理?

web server apache tomcat11-06-Host Manager App -- Text Interface

web server apache tomcat11-07-Realm Configuration

web server apache tomcat11-08-JNDI Resources

web server apache tomcat11-09-JNDI Datasource

web server apache tomcat11-10-Class Loader

...

概述

本文档描述了如何配置 Tomcat 支持容器管理的安全性,方法是连接到现有的用户名、密码和用户角色的“数据库”。

如果您正在使用一个或多个包含 <security-constraint> 元素和定义用户需要如何进行身份验证的 <login-config> 元素的 Web 应用程序,则需要关注此文档。

如果您没有使用这些功能,可以安全地跳过本文档。

有关容器管理安全性的基本背景信息,请参阅 Servlet 规范(版本 2.4),第 12 节。

有关使用 Tomcat 的单点登录功能(允许用户一次在与虚拟主机关联的所有 Web 应用程序中进行身份验证)的信息,请参阅此处。

概览

什么是 Realm?

Realm 是一个包含用户名和密码的“数据库”,用于标识 Web 应用程序(或一组 Web 应用程序)的有效用户,以及与每个有效用户关联的角色列表的枚举。您可以将角色视为类似于 Unix-like 操作系统中的组,因为特定的 Web 应用程序资源的访问权限授予所有具有特定角色的用户(而不是列举关联用户名的列表)。特定用户可以与其用户名关联任意数量的角色。

尽管 Servlet 规范描述了应用程序声明其安全需求的可移植机制(在 web.xml 部署描述符中),但没有一个可移植的 API 定义了 Servlet 容器与关联的用户和角色信息之间的接口。然而,在许多情况下,将 Servlet 容器“连接”到已存在于生产环境中的某个现有的身份验证数据库或机制是可取的。因此,Tomcat 定义了一个 Java 接口(org.apache.catalina.Realm),可以由“插件”组件来实现以建立这种连接。提供了六个标准的插件,支持连接到各种认证信息源:

  • DataSourceRealm - 访问存储在关系数据库中的身份验证信息,通过命名的 JNDI JDBC DataSource 访问。
  • JNDIRealm - 访问存储在基于 LDAP 的目录服务器中的身份验证信息,通过 JNDI 提供程序访问。
  • UserDatabaseRealm - 访问存储在 UserDatabase JNDI 资源中的身份验证信息,该资源通常由 XML 文档(conf/tomcat-users.xml)支持。
  • MemoryRealm - 访问存储在内存对象集合中的身份验证信息,该集合是从 XML 文档(conf/tomcat-users.xml)初始化的。
  • JAASRealm - 通过 Java 认证和授权服务(JAAS)框架访问身份验证信息。

您也可以编写自己的 Realm 实现,并将其与 Tomcat 集成。要这样做,您需要:

  • 实现 org.apache.catalina.Realm 接口,
  • 将编译后的 Realm 放置在 $CATALINA_HOME/lib 中,
  • 如下所述在 "配置 Realm" 部分中声明您的 Realm,
  • 将您的 Realm 声明给 MBeans 描述符。

配置 Realm

在深入了解标准 Realm 实现的细节之前,重要的是要了解 Realm 如何通常配置。通常情况下,您将向 conf/server.xml 配置文件添加一个 XML 元素,看起来像这样:

<Realm className="...这个实现的类名"...此实现的其他属性.../>

<Realm> 元素可以嵌套在以下任何一个 Container 元素内。

Realm 元素的位置直接影响该 Realm 的“范围”(即哪些 Web 应用程序将共享相同的身份验证信息):

  • <Engine> 元素内部 - 此 Realm 将在所有虚拟主机上的所有 Web 应用程序之间共享,除非它被位于下属 <Host><Context> 元素内部的 Realm 元素所覆盖。

  • <Host> 元素内部 - 此 Realm 将在此虚拟主机的所有 Web 应用程序之间共享,除非它被位于下属 <Context> 元素内部的 Realm 元素所覆盖。

  • <Context> 元素内部 - 此 Realm 将仅用于此 Web 应用程序。

普通特性

摘要密码

对于标准的 Realm 实现中的每一个用户密码(默认情况下),密码是以明文形式存储的。在许多环境中,这是不希望的,因为身份验证数据的偶然观察者可以收集足够的信息成功登录,并冒充其他用户。为了避免这个问题,标准实现支持摘要用户密码的概念。这允许密码的存储版本被编码(以一种不易逆转的形式),但 Realm 实现仍然可以用于认证。

当标准的 Realm 通过检索存储的密码并将其与用户提供的值进行比较来进行身份验证时,您可以通过在您的 <Realm> 元素内部放置一个 CredentialHandler 元素来选择摘要密码。支持其中一种算法 SSHA、SHA 或 MD5 的简单选择是使用 MessageDigestCredentialHandler。

此元素必须配置为 java.security.MessageDigest 类支持的摘要算法之一(SSHA、SHA 或 MD5)。当您选择此选项时,存储在 Realm 中的密码内容必须是由指定算法摘要的明文版本。

当 Realm 的 authenticate() 方法被调用时,由用户指定的(明文)密码本身也会被相同的算法摘要,并将结果与 Realm 返回的值进行比较。相等的匹配意味着原始密码的明文版本与用户提供的密码相同,因此应授权该用户。

计算明文密码的摘要值有两种方便的技术支持:

  • 如果您正在编写需要动态计算摘要密码的应用程序,请调用 org.apache.catalina.realm.RealmBase 类的静态 Digest() 方法,将明文密码、摘要算法名称和编码作为参数传递。此方法将返回摘要密码。
  • 如果您想要执行命令行实用程序来计算摘要密码,只需执行以下命令:
    CATALINA_HOME/bin/digest.[bat|sh] -a {algorithm} {cleartext-password}
    并将此明文密码的摘要版本返回到标准输出。

如果在使用摘要密码与 DIGEST 身份验证时,生成摘要所使用的明文不同,并且摘要必须使用不带盐的 MD5 算法的一个迭代。在上述示例中,{cleartext-password} 必须替换为 {username}:{realm}:{cleartext-password}。例如,在开发环境中,这可能采用 testUser:Authentication required:testPassword 的形式。{realm} 的值来自 web 应用程序的 <login-config> 中的 <realm-name> 元素。

如果未在 web.xml 中指定,则使用默认值 Authentication required。

支持使用平台默认编码以外的编码的用户名和/或密码,使用以下命令:

CATALINA_HOME/bin/digest.[bat|sh] -a {algorithm} -e {encoding} {input}

但是,需要小心确保正确传递输入给摘要器。摘要器返回 {input}:{digest}。如果输入在返回中出现损坏,则摘要将无效。

摘要的输出格式为 {salt}${iterations}${digest}。如果盐长度为零,并且迭代次数为一,则输出简化为 {digest}。

CATALINA_HOME/bin/digest.[bat|sh] 的完整语法为:

CATALINA_HOME/bin/digest.[bat|sh] [-a <algorithm>] [-e <encoding>][-i <iterations>] [-s <salt-length>] [-k <key-length>][-h <handler-class-name>] <credentials>
  • -a - 用于生成存储凭据的算法。如果未指定,则处理程序的默认值将被使用。如果未指定处理程序和算法,则默认使用 SHA-512。
  • -e - 用于可能需要字节到/从字符的转换的编码。如果未指定,则使用系统编码(Charset#defaultCharset())。
  • -i - 在生成存储凭据时要使用的迭代次数。如果未指定,则使用 CredentialHandler 的默认值。
  • -s - 生成并存储作为凭据一部分的盐的长度(以字节为单位)。如果未指定,则使用 CredentialHandler 的默认值。
  • -k - 在生成凭证时创建的密钥的长度(以位为单位),如果有的话。如果未指定,则使用 CredentialHandler 的默认值。
  • -h - 要使用的 CredentialHandler 的完全限定类名。如果未指定,则将依次测试内置处理程序(MessageDigestCredentialHandler 然后是 SecretKeyCredentialHandler),并使用第一个接受指定算法的处理程序。

示例应用程序

Tomcat 附带的示例应用程序包含一个受安全约束保护的区域,使用基于表单的登录。要访问它,请将您的浏览器指向 http://localhost:8080/examples/jsp/security/protected/,并使用默认的 UserDatabaseRealm 中描述的用户名和密码之一登录。

管理器应用程序

如果您希望使用管理器应用程序在运行中的 Tomcat 安装中部署和取消部署应用程序,则必须将 "manager-gui" 角色添加到所选 Realm 实现中的至少一个用户名中。这是因为管理器 Web 应用程序本身使用的安全约束要求角色 "manager-gui" 来访问该应用程序的 HTML 接口中的任何请求 URI。

出于安全原因,默认 Realm 中没有任何用户名(即使用 conf/tomcat-users.xml)被分配 "manager-gui" 角色。因此,在 Tomcat 管理员专门为一个或多个用户分配此角色之前,没有人将能够使用此应用程序的功能。

这篇关于web server apache tomcat11-07-Realm Configuration的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/914878

相关文章

Java Web指的是什么

Java Web指的是使用Java技术进行Web开发的一种方式。Java在Web开发领域有着广泛的应用,主要通过Java EE(Enterprise Edition)平台来实现。  主要特点和技术包括: 1. Servlets和JSP:     Servlets 是Java编写的服务器端程序,用于处理客户端请求和生成动态网页内容。     JSP(JavaServer Pages)

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后,将用户信息存储在记录在 localStorage中,然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上,并且头像设置跳转,到个人资料界面 这里数据库中还没有设置相关信息 2.模糊查找 检测输入框是否有变更,有的话调用方法,进行查找 发送检测请求,然后接收的时候设置最多显示四个类似的搜索结果

JavaWeb【day09】--(Mybatis)

1. Mybatis基础操作 学习完mybatis入门后,我们继续学习mybatis基础操作。 1.1 需求 需求说明: 根据资料中提供的《tlias智能学习辅助系统》页面原型及需求,完成员工管理的需求开发。 通过分析以上的页面原型和需求,我们确定了功能列表: 查询 根据主键ID查询 条件查询 新增 更新 删除 根据主键ID删除 根据主键ID批量删除

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线上,让世界看到你的作品。 Django简介 Django是由Adrian Holovaty和Simon Willison于2005年开发的一个开源框架,旨在简

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

red5-server源码

red5-server源码:https://github.com/Red5/red5-server

构建高性能WEB之HTTP首部优化

0x00 前言 在讨论浏览器优化之前,首先我们先分析下从客户端发起一个HTTP请求到用户接收到响应之间,都发生了什么?知己知彼,才能百战不殆。这也是作为一个WEB开发者,为什么一定要深入学习TCP/IP等网络知识。 0x01 到底发生什么了? 当用户发起一个HTTP请求时,首先客户端将与服务端之间建立TCP连接,成功建立连接后,服务端将对请求进行处理,并对客户端做出响应,响应内容一般包括响应

(javaweb)mysql---DDL

一.数据模型,数据库操作 1.二维表:有行有列 2. 3.客户端连接数据库,发送sql语句给DBMS(数据库管理系统),DBMS创建--以文件夹显示 二.表结构操作--创建 database和schema含义一样。 这样就显示出了之前的内容。