3.5. 安全性
elytron 子系统中的 JAAS 域
在 JBoss EAP 8.0 中,旧的 security 子系统已被删除。要继续使用 elytron 子系统的自定义登录模块,请使用新的 Java 身份验证和授权服务(JAAS)安全域 jaas-realm。
JAAS-realm 仅支持与 JAAS 兼容的登录模块。有关 JAAS 的详情,请参阅 Java 身份验证和授权服务(JAAS)参考指南。
jaas-realm 不支持扩展或依赖于 PicketBox API 的自定义登录模块。
虽然 elytron 子系统提供 jaas-realm,但最好使用子系统提供的其他现有安全域。这包括 jdbc-realm、ldap-realm、token-realm 等等。您还可以通过配置 aggregate-realm、distributed-realm 或 failover-realm 来将不同的安全域组合在一起。如果这些都不适合您的目的,请实现一个自定义安全域并使用它,而不是使用自定义登录模块。
以下是您应该使用 jaas-realm 而不是实现自定义安全域的情况:
-
您将从旧的安全模式、并已实施了自定登录模块的系统迁移到
elytron子系统。 - 您将从其他应用服务器迁移到 JBoss EAP,并且已实现了登录模块。
-
您需要将多个登录模块与提供给这些登录模块的各种标志和选项合并。对于
elytron子系统中提供的安全域,这些标志和选项可能无法配置。
如需更多信息,请参阅 使用多个身份存储保护应用程序和管理界面 指南中的创建 JAAS 域。
在 Elytron 和 Elytron 客户端中配置多个证书撤销列表
现在,当您使用多个证书颁发机构 (CA) 时,您可以在 elytron 子系统中配置多个证书撤销列表(CRL)。您可以指定 trust-manager 的 certificate-revocation-lists 属性中使用的 CRL 列表。
如需更多信息,请参阅在 JBoss EAP 中配置 SSL/TLS 指南中的配置 Elytron 中的 证书撤销检查。
Keycloak SAML 适配器功能 pack
JBoss EAP 不再提供 Keycloak SAML 适配器的归档分发。您可以使用 Keycloak SAML 适配器功能 pack 来安装 keycloak-saml 子系统和相关配置。
Keycloak SAML 适配器功能 pack 提供以下层,您可以根据您的用例安装它们:
-
keycloak-saml -
keycloak-client-saml -
keycloak-client-saml-ejb
如需更多信息,请参阅 在 JBoss EAP 中使用单点登录 指南。
原生 OpenID Connect 客户端
JBoss EAP 现在通过 elytron-oidc-client 子系统提供对 OpenID Connect (OIDC)的原生支持。因此,本发行版本中不提供红帽构建的 Keycloak Client Adapter。elytron-oidc-client 子系统充当 Relying party (RP)。elytron-oidc-client 子系统支持仅 bearer 身份验证,还提供多租户支持。例如,您可以使用多租户支持从多个红帽构建的 Keycloak 域验证应用程序的用户。
JBoss EAP 原生 OIDC 客户端不支持 RP-Initiated logout。
您可以使用 elytron-oidc-client 子系统来保护部署到 JBoss EAP 以及使用 OIDC 的 JBoss EAP 管理控制台。
另外,您可以在以下任一情况下,将安全身份从 OIDC 供应商从 Servlet 传播到 Jakarta Enterprise Beans:
- Servlet 和 Jakarta Enterprise Beans 位于同一部署中。
- Servlet 和 Jakarta Enterprise Beans 位于不同的部署中。
如需更多信息,请参阅 在 JBoss EAP 中使用单点登录 指南。
用于对密码进行哈希处理的新 hash-encoding 和 hash-charset 属性
现在,您可以使用 hash-charset 和 hash-encoding 属性为 elytron 子系统安全域中的散列密码指定字符集和字符串格式。默认的 hash-charset 值是 UTF-8。您可以将 hash-encoding 值设置为 base64 或 hex ; base64 是所有域的默认值,唯一的例外是 properties-realm,它的默认值是 hex。
新属性包含在以下安全域中:
-
filesystem-realm -
jdbc-realm -
ldap-realm -
properties-realm
如需更多信息,请参阅使用身份存储保护应用程序和管理界面 指南。
基于 Elytron 文件的审计日志的新 编码 属性
现在,您可以使用 encoding 属性在 Elytron 中指定基于文件的审计日志的 编码。默认值为 UTF-8。可能会有以下值:
-
UTF-8 -
UTF-16BE -
UTF-16LE -
UTF-16 -
US-ASCII -
ISO-8859-1
如需更多信息,请参阅使用身份存储保护应用程序和管理界面 指南中的 Elytron 审计日志记录。
SSLv2Hello
从 JBoss EAP 8.0 Beta 开始,您可以在 elytron 子系统中为 server-ssl-context 和 client-ssl-context 指定 SSLv2Hello 协议。
-
如果要配置
SSLv2Hello,您必须配置另一个加密协议,因为后者的目的是确定连接的服务器支持哪个加密协议。 -
IBM JDK在其客户端中不支持SSLv2Hello,虽然服务器端连接始终接受这个协议。
filesystem-realm更新
现在,您可以加密与 filesystem-realm 中身份关联的明确密码、哈希密码和属性,以提高安全性。您可以通过两种方式执行此操作:
-
通过在
add操作中引用 secret 密钥来创建加密的filesystem-realm。 -
使用 WildFly Elytron 工具中的新的
filesystem-realm-encrypt命令加密现有的filesystem-realm。
现在,您还可以为 filesystem-realm 启用完整性检查,以确保自上次授权写入后 filesystem-realm 中的身份没有被修改。当使用 add 操作创建 filesystem-realm 时,您可以通过引用密钥对来完成此操作。WildFly Elytron 使用密钥对为身份文件生成签名。每当读取身份文件时,完整性检查都会运行。
如需更多信息, 请参阅使用身份存储保护应用程序和管理界面 指南中的 Elytron 中的 Filesystem 域。
对 distributed-realm的更新
现在,您可以通过将新属性 ignore-unavailable-realms 设置为 true,将 distributed-realm 配置为继续搜索引用的安全域,即使连接到任何身份存储的连接也失败。
默认情况下,如果在匹配身份前与任何身份存储的连接失败,身份验证会失败,但 RealmUnavailableException 除外。
当您将 ignore-unavailable-realms 设置为 true 时,如果任何查询的域不可用,则会发出 SecurityEvent。您可以通过将 emit-events 设置为 false 来配置此行为。
如需更多信息,请参阅 使用多个身份存储保护应用程序和管理界面 指南中的以下资源:
Elytron 支持 Artemis 中的 SSLContext
在 JBoss EAP 8 中,提供了 Elytron 支持来实例化 Messaging 子系统中的 SSLContext 变量。此功能帮助您在多个位置配置 SSLContext,因为 Elytron 会实例化这个变量。SSLContext 的连接器必须在客户端的 JBoss EAP 服务器的 elytron 子系统中定义,这意味着您无法从独立的消息传递客户端应用定义它。
新的 Elytron 客户端 java 安全供应商
Elytron 客户端现在提供了一个 Java 安全供应商 org.wildfly.security.auth.client.WildFlyElytronClientlytronClientDefaultSSLContextProvider,您可以使用它来注册 Java 虚拟机(JVM)范围的默认 SSLContext。
当您在 JVM 中注册具有高优先级的提供程序时,使用 SSLContext.getDefault () 方法的所有客户端库都会获取在 Elytron 客户端配置中配置为默认 SSL 上下文的实例。这样,您可以在不直接与 Elytron API 交互的情况下使用 Elytron 客户端的 SSL 上下文配置。
如需更多信息,请参阅 JBoss EAP 指南中的 在 JBoss EAP 客户端中使用 Elytron 客户端默认 SSL context 安全供应商。
可以从 Elytron 获取自定义主体
在 JBoss EAP 8.0 中,您现在可以从 Elytron 获取自定义主体。在以前的版本中,Elytron 需要主体作为 NamePrincipal 实例进行身份验证。虽然可以使用从当前 SecurityDomain 获取的 SecurityIdentity,并使用 SecurityIdentity 属性从域获取信息,但它需要依赖 SecurityDomain 和 SecurityIdentity 而不是更通用的和标准化方法,如 jakarta.security.enterprise.SecurityContext.getCallerPrincipal ()。
现在,在使用 Elytron 时,您可以从 getCallerPrincipal () 方法获取自定义主体。如果您的使用旧安全的应用程序代码依赖于从 getCallerPrincipal () 方法获取自定义主体,您可以在不需要代码更改的情况下迁移应用程序。