第 1 章 保护服务器及其接口
1.1. 构建块 复制链接链接已复制到粘贴板!
1.1.1. 接口和套接字绑定 复制链接链接已复制到粘贴板!
JBoss EAP 利用其主机的接口,如 inet-address
和 nic
,以及用于其 Web 应用及其管理接口通信的端口。这些接口和端口通过 JBoss EAP 中的 接口
和 套接字绑定组
设置进行定义和配置。
有关如何定义和配置 接口
和 socket-binding-groups
的更多信息,请参见 JBoss EAP 配置指南 中的 Socket Bindings 部分。
示例:接口
示例:Socket Binding Group
1.1.2. Elytron 子系统 复制链接链接已复制到粘贴板!
1.1.2.1. 在服务器中启用 Elytron Security 复制链接链接已复制到粘贴板!
可以通过简单的方式在服务器中启用 Elytron。JBoss EAP 7.1 引入了使 Elytron 作为安全提供商的示例配置脚本。此脚本驻留在服务器安装中的 EAP_HOME/docs/examples 目录中。
执行以下命令,以启用服务器间的 Elytron 安全性。
EAP_HOME/bin/jboss-cli.sh --file=EAP_HOME/docs/examples/enable-elytron.cli
$ EAP_HOME/bin/jboss-cli.sh --file=EAP_HOME/docs/examples/enable-elytron.cli
1.1.2.2. 创建 Elytron 安全域 复制链接链接已复制到粘贴板!
elytron
子系统中的安全域与安全域结合使用时,既用于核心管理身份验证,也用于应用身份验证。
部署仅限于在每个部署中使用一个 Elytron 安全域。现在,可以使用一个 Elytron 安全域来完成可能需要多个传统安全域的情况。
使用管理 CLI 添加安全域
/subsystem=elytron/security-domain=domainName:add(realms=[{realm=realmName,role-decoder=roleDecoderName}],default-realm=realmName,permission-mapper=permissionMapperName,role-mapper=roleMapperName,...)
/subsystem=elytron/security-domain=domainName:add(realms=[{realm=realmName,role-decoder=roleDecoderName}],default-realm=realmName,permission-mapper=permissionMapperName,role-mapper=roleMapperName,...)
使用管理控制台添加安全域
- 访问管理控制台。如需更多信息,请参见《JBoss EAP 配置指南 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/configuration_guide/#management_console_overview 》中的管理控制台部分。
-
导航到 Configuration
Subsystems Security(Elytron) Other Settings 并点 View。 -
选择 SSL
Security Domain ,然后使用 Add 按钮配置新的安全域。
1.1.2.3. 创建 Elytron Security Realm 复制链接链接已复制到粘贴板!
elytron
子系统中的安全域与安全域结合使用时,既用于核心管理身份验证,也用于应用身份验证。安全域也专门根据其身份存储键入,如 jdbc-realm、systemsystem-realm
、systemsystem-realm
、properties-realm
等。
使用管理 CLI 添加安全域
/subsystem=elytron/type-of-realm=realmName:add(....)
/subsystem=elytron/type-of-realm=realmName:add(....)
可以在前面的章节中找到添加特定域的示例,如 jdbc
-realm
、filesystem-realm 和 properties
-realm。
使用管理控制台添加安全域
- 访问管理控制台。如需更多信息,请参见《JBoss EAP 配置指南 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/configuration_guide/#management_console_overview 》中的管理控制台部分。
-
导航到 Configuration
Subsystems Security(Elytron) Security Realms 并点 View。 - 从 Security Realm 选项卡中选择适当的安全域类型,再单击 Add 以配置新的安全域。
1.1.2.4. 创建 Elytron Role Decoder 复制链接链接已复制到粘贴板!
角色解码器将安全域提供的身份的属性转换为角色。角色解码器还根据其功能专门键入,如 empty-role-decoder
、simple-role-decoder
和 custom-role-decoder
。
使用管理 CLI 添加角色解码器
/subsystem=elytron/ROLE-DECODER-TYPE=roleDeoderName:add(....)
/subsystem=elytron/ROLE-DECODER-TYPE=roleDeoderName:add(....)
使用管理控制台添加角色解码器
- 访问管理控制台。如需更多信息,请参见《JBoss EAP 配置指南 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/configuration_guide/#management_console_overview 》中的管理控制台部分。
-
导航到 Configuration
Subsystems Security(Elytron) Mappers / Decoders 并点 View。 - 单击 Role Decoder,选择适当的角色解码器类型,再单击 Add 以配置新角色解码器。
1.1.2.5. 创建 Elytron Role Mapper 复制链接链接已复制到粘贴板!
角色映射器会在角色解码到其他角色后对其进行映射。例如,角色名称规范化,或者在主体被解码后添加和删除特定角色。角色映射器也根据自己的功能专门键入,如 add-prefix-role-mapper
、add-suffix-role-mapper
和 constant -role-mapper
。
添加 Role Mapper 获取常规表单
/subsystem=elytron/ROLE-MAPPER-TYPE=roleMapperName:add(...)
/subsystem=elytron/ROLE-MAPPER-TYPE=roleMapperName:add(...)
使用管理控制台添加角色映射器
- 访问管理控制台。如需更多信息,请参见《JBoss EAP 配置指南 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/configuration_guide/#management_console_overview 》中的管理控制台部分。
-
导航到 Configuration
Subsystems Security(Elytron) Mappers / Decoders 并点 View。 - 单击 Role Mapper,选择适当的角色映射器类型,再单击 Add 以配置新角色映射器。
1.1.2.6. 创建 Elytron 权限集 复制链接链接已复制到粘贴板!
权限集可用于为身份分配权限。
使用管理 CLI 添加权限集
/subsystem=elytron/permission-set=PermissionSetName:add(permissions=[{class-name="...", module="...", target-name="...", action="..."}...])
/subsystem=elytron/permission-set=PermissionSetName:add(permissions=[{class-name="...", module="...", target-name="...", action="..."}...])
权限
参数由一组权限组成,其中每个权限都有以下属性:
-
class-name
是权限的完全限定类名称。这是唯一所需的权限属性。 -
模块
是用于加载权限的可选模块。 -
target-name
是在构建时传递给权限的可选目标名称。 -
操作
是在构建权限时传递给权限的可选操作。
1.1.2.7. 创建 Elytron 权限映射器 复制链接链接已复制到粘贴板!
除了角色分配到某一身份外,也可以分配权限。权限映射器为身份分配权限。权限映射器也根据其功能专门键入,如 logical-permission-mapper
、simple-permission-mapper
和 custom-permission-mapper
。
使用管理 CLI 添加权限映射器
/subsystem=elytron/simple-permission-mapper=PermissionMapperName:add(...)
/subsystem=elytron/simple-permission-mapper=PermissionMapperName:add(...)
使用管理控制台添加权限映射器
- 访问管理控制台。如需更多信息,请参见《JBoss EAP 配置指南 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/configuration_guide/#management_console_overview 》中的管理控制台部分。
-
导航到 Configuration
Subsystems Security(Elytron) Mappers / Decoders 并点 View。 - 单击 Principal Decoder,选择适当的主体解码器类型,再单击 Add 以配置新的主体解码器。
1.1.2.8. 创建身份验证配置 复制链接链接已复制到粘贴板!
身份验证配置包含要在连接时使用的凭据。如需有关身份验证配置的更多信息,请参阅如何为 JBoss EAP 配置身份管理中的 Elytron 客户端配置客户端身份验证。
您可以将 Elytron 安全域配置为使用访问用户的凭据,而不是凭据存储。例如,安全域可以和 Kerberos 搭配使用,以对传入的用户进行身份验证。按照 配置 Elytron Subsystem 中的说明,了解如何通过 Kerberos 为 JBoss EAP 设置 SSO,并在 Kerberos 安全工厂中设置 get -kerberos-ticket=true
。
使用管理 CLI 添加身份验证配置
/subsystem=elytron/authentication-configuration=AUTHENTICATION_CONFIGURATION_NAME:add(authentication-name=AUTHENTICATION_NAME, credential-reference={clear-text=PASSWORD})
/subsystem=elytron/authentication-configuration=AUTHENTICATION_CONFIGURATION_NAME:add(authentication-name=AUTHENTICATION_NAME, credential-reference={clear-text=PASSWORD})
使用管理控制台添加身份验证配置
- 访问管理控制台。如需更多信息,请参见《JBoss EAP 配置指南 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/configuration_guide/#management_console_overview 》中的管理控制台部分。
-
导航到 Configuration
Subsystems Security(Elytron) Other Settings 并点 View。 -
点击 Authentication
Authentication Configuration 并点击 Add 来配置新的身份验证配置。
有关 身份验证配置
属性的完整列表,请参阅 Elytron Subsystem 组件参考。
1.1.2.9. 创建身份验证上下文 复制链接链接已复制到粘贴板!
身份验证上下文包含一组规则,以及用于建立连接的身份验证配置或 SSL 上下文。如需有关身份验证上下文的更多信息,请参阅如何为 JBoss EAP 配置身份管理中的 Elytron 客户端配置客户端身份验证。
使用管理 CLI 添加身份验证上下文
身份验证上下文可以通过以下管理 CLI 命令创建:
/subsystem=elytron/authentication-context=AUTHENTICATION_CONTEXT_NAME:add()
/subsystem=elytron/authentication-context=AUTHENTICATION_CONTEXT_NAME:add()
通常,身份验证上下文将包含一组规则以及身份验证配置或 SSL 上下文。以下 CLI 命令提供演示定义仅在主机名是 localhost
时起作用的身份验证上下文:
/subsystem=elytron/authentication-context=AUTHENTICATION_CONTEXT_NAME:add(match-rules=[{authentication-configuration=AUTHENTICATION_CONFIGURATION_NAME, match-host=localhost}])
/subsystem=elytron/authentication-context=AUTHENTICATION_CONTEXT_NAME:add(match-rules=[{authentication-configuration=AUTHENTICATION_CONFIGURATION_NAME, match-host=localhost}])
使用管理控制台添加身份验证上下文
- 访问管理控制台。如需更多信息,请参见《JBoss EAP 配置指南 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/configuration_guide/#management_console_overview 》中的管理控制台部分。
-
导航到 Configuration
Subsystems Security(Elytron) Other Settings 并点 View。 -
点击 Authentication
Authentication Context 并点击 Add 来配置新的身份验证上下文。
有关 authentication-context
属性的完整列表,请参阅 Elytron Subsystem 组件参考。
1.1.2.10. 创建 Elytron 身份验证事实 复制链接链接已复制到粘贴板!
身份验证工厂是用于特定身份验证机制的身份验证策略。身份验证工厂具体基于身份验证机制,如 http-authentication-factory
、sasl-authentication-factory
和 kerberos-security-factory
。
使用管理 CLI 添加身份验证事实
/subsystem=elytron/AUTH-FACTORY-TYPE=authFactoryName:add(....)
/subsystem=elytron/AUTH-FACTORY-TYPE=authFactoryName:add(....)
使用管理控制台添加身份验证事实
- 访问管理控制台。如需更多信息,请参见《JBoss EAP 配置指南 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/configuration_guide/#management_console_overview 》中的管理控制台部分。
-
导航到 Configuration
Subsystems Security(Elytron) Factories / Transformers 并点 View。 - 单击 HTTP Factories、SASL Factories 或 Other Factories,选择适当的工厂类型,然后单击 Add 以配置新工厂。
1.1.2.11. 创建 Elytron Keystore 复制链接链接已复制到粘贴板!
key-store 是密钥
存储或信任存储的定义,包括密钥存储的类型、位置,以及用于访问它的凭据。
要生成用于 elytron
子系统的示例密钥存储,请使用以下命令:
keytool -genkeypair -alias localhost -keyalg RSA -keysize 1024 -validity 365 -keystore keystore.jks -dname "CN=localhost" -keypass secret -storepass secret
$ keytool -genkeypair -alias localhost -keyalg RSA -keysize 1024 -validity 365 -keystore keystore.jks -dname "CN=localhost" -keypass secret -storepass secret
使用管理 CLI 添加密钥存储
若要在 E
lytron 中定义引用新生成的密钥存储的密钥存储,可执行下列管理 CLI 命令:此命令相对于提供的文件系统路径、用于访问密钥存储的凭据引用以及密钥存储的类型,强化密钥存储的路径。
/subsystem=elytron/key-store=newKeyStore:add(path=keystore.jks,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=JKS)
/subsystem=elytron/key-store=newKeyStore:add(path=keystore.jks,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=JKS)
以上命令使用 relative-to
来引用密钥存储文件的位置。或者,您可以在路径中指定密钥存储的完整 路径
,并省略 relative-to
。
使用管理控制台添加密钥存储
- 访问管理控制台。如需更多信息,请参见《JBoss EAP 配置指南 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/configuration_guide/#management_console_overview 》中的管理控制台部分。
-
导航到 Configuration
Subsystems Security(Elytron) Other Settings 并点 View。 -
点击 Stores
Key Store,然后点击 Add 来配置新的密钥存储。
1.1.2.12. 创建 Elytron 密钥管理器 复制链接链接已复制到粘贴板!
key-manager
引用 密钥
存储,并与 SSL 上下文结合使用。
使用管理 CLI 添加密钥管理器
以下命令指定要引用的底层密钥存储,初始化密钥管理器时使用的算法,以及用于访问底层密钥存储中的条目的凭据引用。
/subsystem=elytron/key-manager=newKeyManager:add(key-store=KEY_STORE,algorithm="PKIX",credential-reference={clear-text=secret})
/subsystem=elytron/key-manager=newKeyManager:add(key-store=KEY_STORE,algorithm="PKIX",credential-reference={clear-text=secret})
如果未指定算法,它将被设置为默认的 KeyManagerFactory
算法名称。
可用的密钥管理器算法由正在使用的 JDK 提供。例如 ,使用 SunJSSE 的 JDK 提供 PKIX
和 SunX509
算法。
使用管理控制台添加密钥管理器
- 访问管理控制台。如需更多信息,请参见《JBoss EAP 配置指南 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/configuration_guide/#management_console_overview 》中的管理控制台部分。
-
导航到 Configuration
Subsystems Security(Elytron) Other Settings 并点 View。 -
点击 SSL
Key Manager 并点击 Add 来配置新的密钥管理器。
1.1.2.13. 创建 Elytron Truststore 复制链接链接已复制到粘贴板!
要在 Elytron 中创建信任存储,可执行以下 CLI 命令:
/subsystem=elytron/key-store=default-trust-store:add(type=JKS, relative-to=jboss.server.config.dir, path=application.truststore, credential-reference={clear-text=password})
/subsystem=elytron/key-store=default-trust-store:add(type=JKS, relative-to=jboss.server.config.dir, path=application.truststore, credential-reference={clear-text=password})
为成功执行上述命令,您必须在 EAP_HOME/standalone/configuration
目录中有一个 application.truststore
文件。如果端点的证书由 CA 签名,则信任存储必须包含与端点或证书链关联的证书。
红帽建议您避免使用自签名证书。理想情况下,证书应由 CA 签名,您的信任存储应包含代表 your ROOT
和中间 CA 的证书链。
1.1.2.14. 创建 Elytron Trust Manager 复制链接链接已复制到粘贴板!
要在 Elytron 中定义信任管理器,可执行以下 CLI 命令:
/subsystem=elytron/trust-manager=default-trust-manager:add(key-store=TRUST-STORE-NAME)
/subsystem=elytron/trust-manager=default-trust-manager:add(key-store=TRUST-STORE-NAME)
这会将定义的信任存储设置为应用服务器信任的证书的来源。
1.1.2.15. 使用 Box Elytron 组件的不足 复制链接链接已复制到粘贴板!
JBoss EAP 提供一组默认的 Elytron 组件,在 elytron
子系统中配置。您可以在安全架构指南的 Box 部分中找到有关这些预配置的组件的更多详细信息。
1.1.2.15.1. 保护管理接口 复制链接链接已复制到粘贴板!
您可以找到关于使 JBoss EAP 能够使用开箱即用的 Elytron 组件在用户身份验证中使用 Elytron 保护管理接口的更多详细信息。
1.1.2.15.2. 保护应用 复制链接链接已复制到粘贴板!
elytron
子系统默认为 http
,可用于保护应用的安全。有关如何配置 -authentication-factory 提供 application-http
-authenticationapplication-http-authentication
的更多信息,请参阅 安全架构 指南 的 Box 部分。
要将应用程序配置为使用 application-http-authentication
,请参阅 如何 配置身份管理指南 中的 Web 应用程序以使用 Elytron 或传统安全性进行身份验证。您还可以使用 JBoss EAP 如何配置身份管理指南 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/how_to_configure_identity_management/#elytron_override_deployment_config 的覆盖应用身份验证配置部分中的步骤覆盖所有应用的默认行为。
1.1.2.15.3. 使用 SSL/TLS 复制链接链接已复制到粘贴板!
JBoss EAP 利用旧的核心管理身份验证提供默认的单向 SSL/TLS 配置,但不在 elytron
子系统中提供。您可以在以下部分中找到有关为管理接口以及以下部分使用 elytron
子系统配置 SSL/TLS 的更多详细信息:
1.1.2.15.4. 将 Elytron 与其他子系统一起使用 复制链接链接已复制到粘贴板!
除了保护应用程序和管理接口外,Elytron 还与 JBoss EAP 中的其他子系统集成。
batch-jberet
-
您可以配置
batch-jberet
子系统,以使用 Elytron 安全域运行批处理作业。 如需更多信息,请参阅《配置指南》中的配置批处理作业安全性 。 datasources
- 您可以使用凭据存储或 Elytron 安全域在数据源定义中提供身份验证信息。 如需更多信息,请参阅《配置指南》中的数据源安全性 。
ejb3
-
您可以在
ejb3
子系统中为 Elytron 安全域创建映射,供部署引用。如需更多信息,请参阅开发 EJB 应用中的 Elytron 与 EJB 子系统集成。 iiop-openjdk
-
您可以使用
elytron
子系统通过iiop-openjdk
子系统在客户端和服务器之间配置 SSL/TLS。如需更多信息,请参阅《配置指南 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/configuration_guide/#configure_iiop_ssl 》中的将 IIOP 配置为在 Elytron 子系统中使用 SSL/TLS。 jca
-
您可以使用
elytron-enabled
属性为工作管理器启用 Elytron 安全性。 如需更多信息,请参阅《配置指南》中的配置 JCA 子系统。 jgroups
-
您可以配置
SYM_ENCRYPT
和ASYM_ENCRYPT
协议,以引用elytron
子系统中定义的密钥存储或凭据引用。如需更多信息,请参阅《配置指南 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/configuration_guide/#securing_cluster 》中的保护集群。 mail
-
您可以使用凭据存储在
mail
子系统的服务器定义中提供身份验证信息。如需更多信息,请参阅《配置指南 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/configuration_guide/#mail_subsystem_cred_store 》中的将凭据存储用于密码。 messaging-activemq
-
您可以保护远程连接的安全性,供
messaging-activemq
子系统使用。如需更多信息,请参阅配置消息传递 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/configuring_messaging/#using_the_elytron_subsystem 的 Elytron 子系统部分。 modcluster
-
您可以使用 Elytron client
ssl-context
与使用 SSL/TLS 的负载均衡器进行通信。如需更多信息,请参阅 Elytron 与 ModCluster 子系统集成。 remoting
-
您可以在远程
子系统
中配置入站和出站连接,以引用身份验证上下文、SASL 身份验证工厂和elytron
子系统中定义的 SSL 上下文。有关配置每种连接的详情,请参阅 Elytron 与 Remoting Subsystem 集成。 resource-adapters
- 您可以使用 Elytron 保护与资源适配器的连接。您可以在提交由工作管理器执行的工作时,启用安全流来建立安全凭据。 如需更多信息,请参阅《配置指南》中的配置适配器以使用 Elytron 子系统。
undertow
-
您可以使用
elytron
子系统配置 SSL/TLS 和应用身份验证。有关配置应用程序身份验证的更多信息,请参阅如何使用 SSL/TLS 和将 Web 应用程序配置为使用 Elytron 或传统安全性进行身份验证 ,以了解如何配置身份管理。
1.1.2.16. 启用和禁用 Elytron 子系统 复制链接链接已复制到粘贴板!
elytron
子系统预配置了默认的 JBoss EAP 配置文件以及传统的 security
子系统。
如果您使用尚未配置 elytron
子系统的配置文件,您可以通过添加 elytron 扩展并启用
子系统来添加它。
elytron
添加 elytron
子系统所需的 elytron
扩展:
/extension=org.wildfly.extension.elytron:add()
/extension=org.wildfly.extension.elytron:add()
在 JBoss EAP 中启用 elytron
子系统:
/subsystem=elytron:add reload
/subsystem=elytron:add
reload
在 JBoss EAP 中禁用 elytron
子系统:
/subsystem=elytron:remove reload
/subsystem=elytron:remove
reload
JBoss EAP 中的其他子系统可能具有对 elytron
子系统的依赖性。如果在禁用这些依赖关系之前,您会在启动 JBoss EAP 时看到错误。
1.1.3. 旧安全子系统 复制链接链接已复制到粘贴板!
1.1.3.1. 启用和禁用安全子系统 复制链接链接已复制到粘贴板!
在 JBoss EAP 中禁用安全子系统:
/subsystem=security:remove
/subsystem=security:remove
JBoss EAP 中的其他子系统可能会具有对 security 子系统的依赖性。如果在禁用这些依赖关系之前,您会在启动 JBoss EAP 时看到错误。
在 JBoss EAP 中启用安全子系统:
/subsystem=security:add
/subsystem=security:add
1.1.4. 传统安全域 复制链接链接已复制到粘贴板!
JBoss EAP 使用安全域来定义身份验证和授权机制,如本地、LDAP 和属性,然后可由管理接口使用。有关安全域的更多背景信息,请参阅红帽 JBoss 企业应用平台安全架构指南的安全 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/security_architecture/#security_realms 域部分。
示例: Security Realms
除了更新现有的安全域外,JBoss EAP 还允许您创建新的安全域。您可以通过管理控制台创建新的安全域,也可以从管理 CLI 调用以下命令:
/core-service=management/security-realm=NEW-REALM-NAME:add()
/core-service=management/security-realm=NEW-REALM-NAME:add()
如果您创建新的安全域并希望使用属性文件进行身份验证或授权,您必须专门为新安全域创建新的属性文件。JBoss EAP 不会重复利用由其他安全域使用的现有文件,也不会自动创建新的配置中指定的新文件(如果这些文件不存在)。
1.1.5. 使用身份验证和套接字绑定来保护管理接口 复制链接链接已复制到粘贴板!
默认情况下,JBoss EAP 定义用于连接管理接口的 http-interface
:
您可以使用组合 socket-binding、http
-authentication-factory
和 http-upgrade
来使用 elytron
子系统保护管理接口。或者,您也可以 将 socket-binding
与 security-realm
一起使用,以通过传统核心管理身份验证来保护管理接口。您还可以禁用管理接口,并将接口的用户配置为拥有各种角色和访问权限。