2.6. Elytron 子系统
JBoss EAP 7.1 中引入了 elytron
子系统。它以 WildFly Elytron 项目为基础,该项目是一种安全框架,用于统一整个应用服务器的安全性。elytron
子系统启用单一配置,以同时保护应用和管理接口。WildFly Elytron 还提供一组 API 和 SPI,用于提供自定义功能实施并与 elytron
子系统集成。
此外,WildFly Elytron 还有一些其他重要功能:
- 更强大的 HTTP 和 SASL 身份验证机制.
-
改进的架构允许在
安全域
之间传播安全身份。这确保了可用于授权的透明转换。这种转换利用可配置的角色解码器、角色映射器和权限映射器进行。 - SSL/TLS 配置的集中点,包括密码套件和协议。
-
SSL/TLS 优化,如及时
的安全智能
结构,以及建立 SSL/TLS 连接的紧密关联授权。近日安全身份构建
消除了基于每个请求构建安全
身份的需要。通过紧密关联身份验证来建立 SSL/TLS 连接,可以实现收到第一个请求的 BEFORE 权限检查。 - 个安全的凭证存储,用于替换前面的 vault 实施来存储纯文本字符串。
新的 elytron
子系统与传统 安全
子系统和旧版核心管理身份验证并行存在。传统和 Elytron 方法都可用于保护管理接口,并为应用提供安全性。
基于 PicketBox 的 Elytron 和传统安全子系统的架构截然不同。Elytron 曾尝试创建一个解决方案,允许您在当前运行的同一安全环境中运行;然而,这并不表示每个 PicketBox 配置选项在 Elytron 中都有等同的配置选项。
如果您无法在文档中找到信息以帮助您使用旧版安全实施时获得类似功能,则可以通过以下方法之一找到帮助:
- 如果您有红帽开发订阅 ,请访问红帽客户门户上的支持案例、解决方案 和知识文章。您还可以使用技术支持创建一个问题单,并从 WildFly 社区获得帮助,如下所述。
- 如果您没有红帽开发订阅,仍然可以访问红帽客户门户上的知识库文章。您还可以加入用户论坛和实时聊天,询问 WildFly 社区的问题。WildFly 社区产品由 Elytron 工程团队主动监控。
2.6.1. 核心概念和组件 复制链接链接已复制到粘贴板!
elytron
子系统架构和设计背后的概念是使用较小的组件来组合完整的安全策略。默认情况下,JBoss EAP 提供许多组件的实施,但 elytron
子系统也允许您提供专用的自定义实施。
在"elytron"子系统中的每个组件实施都以单独的能力进行处理。这意味着,可以使用不同的资源混合、匹配和建模不同的实施。
2.6.1.1. 功能和要求 复制链接链接已复制到粘贴板!
功能是 JBoss EAP 中使用的一种功能,可通过管理层来公开。个功能可以依赖于其他功能,这种依赖关系由管理层进行调和。些功能由 JBoss EAP 自动提供,但运行时可用的全部功能都使用 JBoss EAP 配置来确定。管理层验证服务器启动以及进行任何配置更改时是否存在其他功能所需的所有功能。功能与 JBoss 模块和扩展集成,但它们都是不同的概念。
除了注册它依赖的其他功能外,一个功能还必须注册与这些功能相关的一组要求。能力可以指定以下类型的要求:
- 硬要求
- 能力依赖于其他功能,因此必须始终存在。
- 可选要求
- 功能的可选方面取决于另一能力,这些功能可以也可以启用。因此,在分析配置前无法确定或知道此要求。
- 仅运行时要求
- 能力将检查运行时是否存在所需的能力。如果存在所需的能力,则将使用它。如果没有所需的能力,将不会使用它。
2.6.1.2. API、SPI 和自定义实施 复制链接链接已复制到粘贴板!
Elytron 提供一组安全 API 和 SPI,以便其他子系统和使用者可以直接使用它们,从而降低集成开销。尽管大多数用户将使用 JBoss EAP 提供的功能,但 Elytron API 和 SPI 也可供自定义实施用于替换或扩展 Elytron 功能。
2.6.1.3. 安全域 复制链接链接已复制到粘贴板!
安全域是安全策略的表示形式,由一个或多个安全域以及一组执行转换的资源提供支持。安全域将生成 SecurityIdentity
。SecurityIdentity
由执行授权的其他资源使用,如应用。SecurityIdentity
是当前用户的表示,它基于原始 授权身份及其
关联的角色和权限。
您还可以配置安全域,以允许 Security Identity from other
安全域的内向。当身份 流化 时,它会保留其原始 授权Identity
,并为它分配一组新的角色和权限,从而创建一个新的 SecurityIdentity
。
部署仅限于在每个部署中使用一个 Elytron 安全域。现在,可以使用一个 Elytron 安全域来完成可能需要多个传统安全域的情况。
2.6.1.4. Security Realms 复制链接链接已复制到粘贴板!
安全域提供对身份存储的访问,用于获取凭据。这些凭据允许身份验证机制获取用于执行身份验证的原始 授权Identity
。它们还允许验证机制在验证证据时执行验证。
您可以将一个或多个安全域与一个安全域关联。些安全域实施也公开用于修改的 API,这意味着安全域可以对底层身份存储进行更新。
2.6.1.5. 角色解码器 复制链接链接已复制到粘贴板!
角色解码器与安全域关联,用于解码当前用户的角色。角色解码器取从安全域返回的原始 AuthorizationIdentity
,并将其属性转换为角色。
2.6.1.6. 角色映射器 复制链接链接已复制到粘贴板!
角色映射器将角色修改应用到身份。这可以从对角色格式进行规范化,到添加或删除特定角色等。角色映射器可以与安全域和安全域关联。如果角色映射器与安全域关联,则角色映射将在安全域级别上应用,然后才会在安全域级别上应用任何转换(如角色解码或额外的角色映射)。如果角色映射器和其他转换(如角色解码器)都在安全域中配置,则在应用角色映射器之前执行所有其他转换。
2.6.1.7. 权限映射器 复制链接链接已复制到粘贴板!
权限映射器与安全域关联,并为 SecurityIdentity
分配一组权限。
2.6.1.8. 主体转换器 复制链接链接已复制到粘贴板!
主要的转换器可用于 elytron
子系统内的多个位置。主体转换器可以转换或将名称映射到另一个名称。
2.6.1.9. 主体 Decoders 复制链接链接已复制到粘贴板!
首席解码器可用于 elytron
子系统内的多个位置。主体解码器将身份从 Principal
转换为名称的字符串表示。例如,X500PrincipalDecoder
允许您将 X500Principal X500Principal
从证书的可分辨名称转换为字符串表示。
2.6.1.10. realm Mappers 复制链接链接已复制到粘贴板!
域映射器与安全域关联,在安全域配置了多个安全域时使用。域映射器也可以与 http-authentication
域映射器使用身份验证期间提供的名称来选择用于身份验证的安全域,并获取原始 -factory 和
相关联。sasl-authentication-factory
的机制
或机制域授权 IDdentity
。
2.6.1.11. 身份验证事实 复制链接链接已复制到粘贴板!
身份验证工厂是身份验证策略的表示形式。身份验证与安全域、机制工厂和机制选择器相关联。安全域提供要身份验证的 SecurityIdentity
,机制工厂提供服务器端身份验证机制,而机制选择器则用于获取特定于所选机制的配置。机制选择器可以包含有关域名称的信息,如应向远程客户端提供的机制,以及身份验证过程中要使用的其他主体转换器和域映射器。
2.6.1.12. KeyStores 复制链接链接已复制到粘贴板!
key-store 是密钥
存储或信任存储的定义,包括密钥存储的类型、其位置以及用于访问它的凭据。
2.6.1.13. 密钥管理器 复制链接链接已复制到粘贴板!
key-manager
引用 密钥
存储,并与 SSL 上下文结合使用。
2.6.1.14. 信任管理器 复制链接链接已复制到粘贴板!
trust-manager
引用作为信任存储(在 密钥存储
中定义),它与 SSL 上下文一起使用,通常用于双向 SSL/TLS。
2.6.1.15. SSL 上下文 复制链接链接已复制到粘贴板!
elytron
子系统中定义的 SSL 上下文是一个 javax.net.ssl.SSLContext
,这意味着它可供直接使用 SSL 上下文的任何对象使用。除了 SSL 上下文的常规配置外,还可以配置其他项目,如密码套件和协议。SSL 上下文将嵌套所配置的任何其他项目。
2.6.1.16. 安全凭证存储 复制链接链接已复制到粘贴板!
之前的用于纯文本字符串加密的 vault 实施已被新设计的凭证存储替代。除了保护它存储的凭据外,凭据存储还用于存储纯文本字符串。
2.6.2. Elytron 身份验证流程 复制链接链接已复制到粘贴板!
可以在 elytron
子系统内定义多个主体转换器、域映射器和一个主体解码器。以下小节讨论这些组件在身份验证过程中是如何发挥作用的,以及如何将主体映射到适当的安全域。
当一个主体被验证时,它会按顺序执行以下步骤:
- 确定和配置适当的机制配置。
-
传入的主体映射到
SecurityIdentity
中。 -
此安全性
用于确定适当的安全域。 - 确定安全域后,主体会再次转换。
- 最终转换发生,允许特定机制的转换。
下图演示了左侧列中突出显示的这些步骤,以及显示各个阶段中使用的组件。
图 2.1. Elytron 身份验证流程
预域映射
在预域映射期间,经过身份验证的主体映射到 SecurityIdentity
,该表单可以识别应使用哪个安全域,并且将包含表示身份验证信息的单个 Principal
。主体转换程序和主体解码器按以下顺序调用:
-
机制 Realm -
pre-realm-principal-transformer
-
机制配置 -
预域-principal-transformer
-
安全域 -
主体decoder
和pre-realm-principal-transformer
如果这个过程导致 null 主体,则会抛出错误并终止身份验证。
图 2.2. 预域映射
域名称映射
获取映射的主体后,将识别将用于加载身份的安全域。此时,realm 名称是由安全域定义的名称,也不是安全域的机制域名称。该配置会按照以下顺序查找安全域名:
-
机制 Realm -
域映射器
-
机制配置 -
realm-mapper
-
安全域 -
realm-mapper
如果 RealmMapper
返回 null,或者没有可用的映射器,则将使用安全域中的 default-realm
。
图 2.3. 域名称映射
安装后映射
在确定了某个领域后,主体将经历另一轮转换。转换器按以下顺序调用:
-
机制 Realm -
后域后转换器
-
机制配置 -
域后-principal-transformer
-
安全域 -
realm-principal-transformer
如果这个过程导致 null 主体,则会抛出错误并终止身份验证。
图 2.4. 安装后映射
最终主要转换
最后,进行最后一类主要转换,允许特定机制的转换在特定领域转换前后应用。如果此阶段不需要,则可在域后映射阶段获得相同的结果。转换器按以下顺序调用:
-
机制 Realm -
最终主转换器
-
机制配置
- 最终的主转换器
-
realm Mapping -
principal-transformer
如果这个过程导致 null 主体,则会抛出错误并终止身份验证。
图 2.5. 最终主要转换
获取 Realm 身份
2.6.3. HTTP 身份验证 复制链接链接已复制到粘贴板!
Elytron 提供一整套 HTTP 身份验证机制,包括 BASIC
、FORM
、DIGEST
、SPNEGO
和 CLIENT_CERT
。HTTP 身份验证是使用 HttpAuthenticationFactory
进行处理的,它既是使用 HTTP 身份验证机制的身份验证策略,也是配置的身份验证机制的工厂。
HttpAuthenticationFactory
参考以下内容:
- SecurityDomain
- 将对其执行任何机制身份验证的安全域。
- HttpServerAuthenticationMechanismFactory
- 服务器端 HTTP 身份验证机制的一般工厂。
- MechanismConfigurationSelector
-
您可以使用它为身份验证机制提供其他配置。mechanism
ConfigurationSelector
的目的是获取特定于所选机制的配置。这包括有关应当向远程客户端提供的机制、其他主要转换器和身份验证过程中要使用的域映射器的域名信息。
2.6.4. SASL 身份验证 复制链接链接已复制到粘贴板!
SASL 是一种身份验证框架,将身份验证机制本身与其使用的协议分开。它还允许使用其他身份验证机制,如 DIGEST-MD5
、GSSAPI
、OTP
和 SCRAM
。SASL 身份验证不属于 Jakarta EE 规范。SASL 身份验证使用 SaslAuthenticationFactory
进行处理,SaslAuthenticationFactory 既是使用 SASL 身份验证机制的身份验证策略,又是用于配置身份验证机制的工厂。
SaslAuthenticationFactory
参考以下内容:
- SecurityDomain
- 将对其执行任何机制身份验证的安全域。
- SaslServerFactory
- 服务器端 SASL 验证机制的一般工厂。
- MechanismConfigurationSelector
-
您可以使用它为身份验证机制提供其他配置。mechanism
ConfigurationSelector
的目的是获取特定于所选机制的配置。这包括有关应当向远程客户端提供的机制、其他主要转换器和身份验证过程中要使用的域映射器的域名信息。
2.6.5. Elytron Subsystem 和 Legacy 系统间的交互 复制链接链接已复制到粘贴板!
您可以将传统 安全
子系统组件以及旧版核心管理身份验证的一些主要组件映射到 Elytron 功能。这允许在基于 Elytron 的配置中使用这些旧组件,并允许从旧组件进行增量迁移。
2.6.6. Elytron 子系统中的资源 复制链接链接已复制到粘贴板!
JBoss EAP 在 elytron
子系统中提供一组资源:
工厂
- aggregate-http-server-mechanism-factory
- HTTP 服务器工厂定义,其中 HTTP 服务器工厂是其他 HTTP 服务器工厂的聚合。
- aggregate-sasl-server-factory
- SASL 服务器工厂定义,其中 SASL 服务器工厂是其他 SASL 服务器工厂的聚合。
- configurable-http-server-mechanism-factory
- HTTP 服务器工厂定义,它将包装另一个 HTTP 服务器工厂并应用指定的配置和过滤。
- configurable-sasl-server-factory
- SASL 服务器工厂定义,打包另一个 SASL 服务器工厂并应用指定的配置和过滤。
- custom-credential-security-factory
-
自定义凭据
SecurityFactory
定义。 - http-authentication-factory
包含安全域与
HttpServerAuthenticationMechanismFactory 关联
的资源.如需更多信息,请参阅 如何使用 证书 配置 JBoss EAP 身份管理。
- kerberos-security-factory
用于获取用于身份验证期间使用的
GSSCredential
的安全工厂。如需更多信息,请参阅如何为 JBoss EAP 使用 Kerberos 设置 SSO 配置 Elytron 子系统。
- mechanism-provider-filtering-sasl-server-factory
- SASL 服务器工厂定义,允许供应商过滤该工厂,其中使用提供程序加载工厂。
- provider-http-server-mechanism-factory
- HTTP 服务器工厂定义,其中 HTTP 服务器工厂是来自提供程序列表中的工厂聚合。
- provider-sasl-server-factory
- SASL 服务器工厂定义,其中 SASL 服务器工厂是来自提供程序列表中的工厂聚合。
- sasl-authentication-factory
包含安全域与 SASL 服务器工厂关联的资源。
如需更多信息,请参阅如何为 JBoss EAP 配置服务器安全性 https://access.redhat.com/documentation/zh-cn/red_hat_jboss_enterprise_application_platform/7.4/html-single/how_to_configure_server_security/#elytron_secure_mgmt_new_identity_store 中的新身份服务的安全管理接口。
- service-loader-http-server-mechanism-factory
-
HTTP 服务器工厂定义,其中 HTTP 服务器工厂是利用
ServiceLoader
标识的工厂的聚合。 - service-loader-sasl-server-factory
-
SASL 服务器工厂定义,其中 SASL 服务器工厂是通过
ServiceLoader
识别的工厂聚合。
主体转换器
- aggregate-principal-transformer
- 单个转换器试图转换原始主体,直到返回一个非空主体。
- chained-principal-transformer
- 典型的转换器定义,主体转换器是其他主要转换器的串联。
- constant-principal-transformer
- 主流转换器定义,主体转换器始终返回相同的常量。
- custom-principal-transformer
- 自定义主体转换器定义.
- regex-principal-transformer
- 基于正则表达式的主体转换器.
- regex-validating-principal-transformer
- 基于正则表达式的主体转换器,它使用正则表达式来验证名称。
主体 Decoders
- aggregate-principal-decoder
- 一个主要的解码器定义,其中主体解码器是其他主体解码器的聚合。
- concatenating-principal-decoder
- 一个主要的解码器定义,其中主体解码器是其他主体解码器的串联。
- constant-principal-decoder
- 定义始终返回相同常数的主要解码器。
- custom-principal-decoder
- 自定义主体解码器的定义。
- x500-attribute-principal-decoder
定义基于 X500 属性的主体解码器。
如需更多信息,请参阅 如何使用 证书 配置 JBoss EAP 身份管理。
- x509-subject-alternative-name-evidence-decoder
在 X.509 证书中使用主题替代名称扩展作为主体的证明解码器。
如需更多信息,请参阅如何使用主题备用名称扩展配置 X.509 证书的 Evidence Decoder ,以了解如何为 JBoss EAP 配置服务器安全性。
realm Mappers
- constant-realm-mapper
- 始终返回相同值的恒定域映射器的定义。
- custom-realm-mapper
- 自定义域映射器的定义.
- mapped-regex-realm-mapper
- 首先使用正则表达式提取域名称的域映射器实施的定义,然后使用配置的域名映射进行转换。
- simple-regex-realm-mapper
- 定义一个尝试使用正则表达式中的捕获组提取域名的简单域映射器(如果未提供匹配项),则改为使用委派域映射器。
realm
- aggregate-realm
域定义是两个域的聚合,一个用于身份验证步骤,另一个用于加载授权步骤的身份。
注意导出的传统安全域不能用作
aggregate-realm 的授权步骤的 Elytron 安全域
。- caching-realm
启用缓存到另一安全域的 realm 定义。缓存策略是 Least Recently Used,在达到最大条目数时,访问最少的条目将被丢弃。
如需更多信息,请参阅如何在 为 JBoss EAP 配置身份管理 中为安全性 Realms 设置缓存。
- custom-modifiable-realm
-
配置为可修改的自定义域预期将实施 Mod
ableSecurityRealm
接口。通过将域配置为可修改的管理操作,将可用于操作该域。 - custom-realm
-
自定义域定义可以实施 s
SecurityRealm
接口或 ModibleSecurityRealm
接口。无论实施了哪一个接口,都不会公开用于管理域。但是,依赖该域的其他服务仍能够执行类型检查和投射,以获取修改 API 的访问权限。 - filesystem-realm
由文件系统支持的简单安全域定义。
如需更多信息,请参阅如何在如何为 JBoss EAP 配置身份管理中,使用基于文件系统的用户身份 存储 配置身份验证。
- identity-realm
- 在管理模型中表示身份的安全域定义。
- jdbc-realm
由使用 JDBC 的数据库支持的安全域定义。
如需更多信息,请参阅如何在如何为 JBoss EAP 配置身份管理中,使用基于数据库的用户身份 存储 配置身份验证。
- key-store-realm
由密钥存储支持的安全域定义。
如需更多信息,请参阅 如何使用 证书 配置 JBoss EAP 身份管理。
- ldap-realm
LDAP 支持的安全域定义。
如需更多信息,请参阅如何在如何为 JBoss EAP 配置身份管理中,使用基于 LDAP 的 Identity Store 配置身份验证。
- properties-realm
由属性文件支持的安全域定义。
使用基于属性文件的身份存储配置身份验证,以如何为 JBoss EAP 配置身份管理。
- token-realm
- 种安全域定义,能够从安全令牌验证和提取身份。
权限映射器
- custom-permission-mapper
- 自定义权限映射器的定义.
- logical-permission-mapper
- 逻辑权限映射器的定义.
- simple-permission-mapper
- 定义简单配置的权限映射器.
- constant-permission-mapper
- 始终返回相同常量的权限映射器的定义。
角色解码器
- custom-role-decoder
- 自定义 RoleDecoder 的定义.
- simple-role-decoder
- 定义一个简单的 RoleDecoder,该角色采用单个属性并将其直接映射到角色。
- source-address-role-decoder
-
定义
source-address-role-decoder
,它将角色根据客户端的 IP 地址分配给身份。 - aggregate-role-decoder
聚合了两个或多个角色解码器返回的角色的
aggregate-role-decoder
定义。如需更多信息,请参阅如何在如何为 JBoss EAP 配置身份管理中,使用基于文件系统的用户身份 存储 配置身份验证。
角色映射器
- add-prefix-role-mapper
- 角色映射器的角色映射器定义,它为每个提供的每一提供添加前缀。
- add-suffix-role-mapper
- 角色映射器的角色映射器定义,每个提供的后缀都会添加后缀。
- aggregate-role-mapper
- 角色映射器定义,其中角色映射器是其他角色映射器的聚合。
- constant-role-mapper
角色映射器定义,始终返回一组恒定角色。
如需更多信息,请参阅 如何使用 证书 配置 JBoss EAP 身份管理。
- custom-role-mapper
- 自定义角色映射器的定义.
- logical-role-mapper
- 角色映射器的角色映射器定义,该定义使用两个引用的角色映射器执行逻辑操作。
- mapped-role-mapper
- 角色映射器的角色映射器定义,该映射器使用预配置的角色名称映射器映射器。
- regex-role-mapper
角色映射程序定义,角色映射程序使用正则表达式来转换角色。例如,您可以把 "app-admin", "app-operator" 分别映射到 "admin" 和 "operator"。
如需更多信息,请参阅 regex-role-mapper 属性。
SSL 组件
- client-ssl-context
用于连接客户端的 SSLContext。
如需更多信息,请参阅如何为 JBoss EAP 配置服务器 https://access.redhat.com/documentation/zh-cn/red_hat_jboss_enterprise_application_platform/7.4/html-single/how_to_configure_server_security/#using_client_ssl_context 安全性中的客户端-ssl-context。
- filtering-key-store
过滤密钥存储定义,它通过过滤密钥存储
来提供密钥存储
。如需更多信息,请参阅如何为 JBoss EAP 配置服务器安全性 https://access.redhat.com/documentation/zh-cn/red_hat_jboss_enterprise_application_platform/7.4/html-single/how_to_configure_server_security/#using_filtering_key_store 的过滤密钥存储。
- key-manager
用于创建密钥管理器列表的关键管理器定义,以用于创建 SSL 上下文。
如需更多信息,请参阅如何使用 Elytron 子系统为管理接口启用单向 SSL/TLS ,了解如何为 JBoss EAP 配置服务器安全性。
- key-store
密钥存储定义.
如需更多信息,请参阅如何使用 Elytron 子系统为管理接口启用单向 SSL/TLS ,了解如何为 JBoss EAP 配置服务器安全性。
- ldap-key-store
LDAP 密钥存储定义,它将从 LDAP 服务器加载密钥存储。
如需更多信息,请参阅如何为 JBoss EAP 配置服务器安全性的使用 ldap-key-store。
- server-ssl-context
用于连接的服务器端的 SSL 上下文。
如需更多信息,请参阅如何使用 Elytron 子系统为管理接口启用单向 SSL/TLS ,了解如何为 JBoss EAP 配置服务器安全性。
- trust-manager
用于创建
TrustManager
列表的信任管理器定义,用于创建 SSL 上下文。如需更多信息,请参阅如何使用 Elytron 子系统为管理接口启用双向 SSL/TLS ,了解如何为 JBoss EAP 配置服务器安全性。
其他
- aggregate-providers
-
由两个或多个
提供商加载器
资源的聚合。 - 身份验证配置
- 单个身份验证配置定义,供部署到 JBoss EAP 和其他资源的客户端在进行远程连接时用于进行身份验证。
- authentication-context
-
单个身份验证上下文定义,用于在部署至 JBoss EAP 的客户端和其他资源进行远程连接时,提供
ssl
。-context
和身份验证配置 - credential-store
凭据存储来为敏感信息(如外部服务的密码)保留别名。
如需更多信息,请参阅如何为 JBoss EAP 配置服务器安全性 https://access.redhat.com/documentation/zh-cn/red_hat_jboss_enterprise_application_platform/7.4/html-single/how_to_configure_server_security/#cred_store_create 创建凭据存储。
- dir-context
用于连接到目录(LDAP)服务器的配置。
如需更多信息,请参阅如何为 JBoss EAP 配置服务器安全性的使用 ldap-key-store。
- provider-loader
- 提供商加载器的定义。
- security-domain
安全域定义。
如需更多信息,请参阅 如何使用 证书 配置 JBoss EAP 身份管理。
- security-property
- 要设置的安全属性的定义。