第 6 章 安全性
- 验证
- 授权
- 规则软件包签名(Rule Package Signing)
6.1. 验证
重要
jboss-brms.war/WEB-INF/components.xml 文件配置使用哪种验证方法。缺省的配置会有多个“被注释”的选项,但实际的设置类似于:
		<security:identity authenticate-method="#{authenticator.authenticate}" jaas-config-name="jmx-console"/> 
<component name="org.jboss.seam.security.roleBasedPermissionResolver">
     <property name="enableRoleBasedAuthorization">false</property>
    </component>
<security:identity authenticate-method="#{authenticator.authenticate}" jaas-config-name="jmx-console"/> 
<component name="org.jboss.seam.security.roleBasedPermissionResolver">
     <property name="enableRoleBasedAuthorization">false</property>
    </component>
注意
components.xml 文件在 BRMS 5.2 里进行了修改。在 5.1 和更早版本里,这个文件类似于:
			<security:identity authenticate-method="#{authenticator.authenticate}" jaas-config-name="jmx-console"/> 
<security:role-based-permission-resolver enable-role-based-authorization="false"/>
<security:identity authenticate-method="#{authenticator.authenticate}" jaas-config-name="jmx-console"/> 
<security:role-based-permission-resolver enable-role-based-authorization="false"/>重要
jmx-console 验证策略里定义的帐号名、密码和角色。红帽推荐你编辑这个策略以满足特定环境的需要。
			- 编辑应用服务器的合适的 JBoss 登录模块。
- 配置 JBoss 企业级 BRMS 平台来使用这个模块。
注意
警告
重要
BRMS Permissions 界面里为至少一个用户分配 admin 角色,只有具有 admin 权限的用户可以执行许多管理性的任务,如管理用户角色(『第 6.2 节 “
		 授权”』里会进一步进行解释)。
			6.1.1. 验证示例:UserRolesLoginModule
org.jboss.security.auth.spi.UsersRolesLoginModule 登录模块来访问存储在 props/brms-users.properties 和 props/brms-roles.properties 文件里的一系列用户帐号。
			过程 6.1. 验证示例:UserRolesLoginModule
- 确保已经正确配置了验证系统 登录模块使用两个文件来存储登录名、密码以及分配给用户的角色。在- jboss-as-web/server/PROFILE/conf/props/目录里创建- brms-users.properties和- brms-roles.properties文件并用这个格式在- brms-users.properties里指定至少一个用户:- username=password。(- brms-roles.properties可以为空)
- 关闭应用服务器 在进行这些修改前关闭应用服务器。
- 配置 JBoss 登录模块 要配置 JBoss 登录模块,打开- jboss-as-web/server/PROFILE/conf/login-config.xml文件。它是一个包含- <policy>元素以及几个- <application-policy>子元素的 XML 文件。每个- <application-policy>元素都定义了一个不同的验证模式。添加下列- <application-policy>XML 片段作为- <policy>元素的新的子元素。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 配置 BRMS 平台以使用登录模块 打开- jboss-as-web/server/PROFILE/deploy/jboss-brms.war/WEB-INF/components.xml为。它包含一个- <components>元素并带有几个子元素,其中包括- <security:identity>。注释现有的- <security:identity>元素以防止冲突。添加下列- <security:identity>元素。- <security:identity authenticate- method="#{authenticator.authenticate}" jaas-config-name="brms"/>- <security:identity authenticate- method="#{authenticator.authenticate}" jaas-config-name="brms"/>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow jaas-config-name 属性必须和 application-policy 相同。如果在前一步骤修改了 application-policy,也请修改这里的 jaas-config-name 属性进行匹配。
- 重新启动 重启应用服务器
6.1.2. 验证示例:LDAP
过程 6.2. 验证示例 2:LDAP
- 确保已经正确配置了 LDAP 服务器 确定防火墙和网络配置没有阻断应用服务器和 LDAP 服务器间的通讯。
- 关闭应用服务器 在进行这些修改前关闭应用服务器。
- 配置 JBoss 登录模块 要配置 JBoss 登录模块,打开- jboss-as-web/server/PROFILE/conf/login-config.xml文件。它是一个包含- <policy>元素以及几个- <application-policy>子元素的 XML 文件。每个- <application-policy>元素都定义了一个不同的验证模式。添加下列- <application-policy>XML 片段作为- <policy>元素的新的子元素。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 用适合你的 LDAP 服务器的值更新这个配置文件。
- 配置 BRMS 平台以使用登录模块 打开- jboss-as-web/server/PROFILE/deploy/jboss-brms.war/WEB-INF/components.xml为。它包含一个- <components>元素并带有几个子元素,其中包括- <security:identity>。注释现有的- <security:identity>元素以防止冲突。添加下列- <security:identity>元素。- <security:identity authenticate-method="#{authenticator.authenticate}" jaas-config-name="brms"/>- <security:identity authenticate-method="#{authenticator.authenticate}" jaas-config-name="brms"/>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow jaas-config-name 属性必须和 application-policy 相同。如果在前一步骤修改了 application-policy,也请修改这里的 jaas-config-name 属性进行匹配。
- 重新启动 重启应用服务器
注意
6.2. 
		 授权
图 6.1. 管理用户权限
过程 6.3. 启用基于角色的授权
- 分配管理员权限给用户 在启用基于角色的授权之前,我们有必要为至少一个信任的用户分配管理员角色。详情请参考『过程 6.5, “管理用户权限”』。
- 关闭应用服务器 在进行这些修改前关闭应用服务器。
- 打开 - components.xml在文本编辑器里打开- jboss-as-web/server/PROFILE/deploy/jboss-brms.war/WEB-INF/components.xml文件。
- 找到 - <property name="enableRoleBasedAuthorization">元素在缺省的- components.xml文件里,这个 XML 元素是- <components>的子元素。- <component name="org.jboss.seam.security.roleBasedPermissionResolver"> <property name="enableRoleBasedAuthorization">false</property> </component> - <component name="org.jboss.seam.security.roleBasedPermissionResolver"> <property name="enableRoleBasedAuthorization">false</property> </component>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 注意 在 5.1 和更早的版本里,找到下列 XML- <security:role-based-permission-resolver enable-role-based-authorization="false"/>- <security:role-based-permission-resolver enable-role-based-authorization="false"/>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 更新属性值为 "True" 更新 enable-role-based-authorization 属性为- true并保存文件。- <component name="org.jboss.seam.security.roleBasedPermissionResolver"> <property name="enableRoleBasedAuthorization">true</property> </component> - <component name="org.jboss.seam.security.roleBasedPermissionResolver"> <property name="enableRoleBasedAuthorization">true</property> </component>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 注意 在 5.1 和更早的版本里,找到下列 XML- <security:role-based-permission-resolver enable-role-based-authorization="true"/>- <security:role-based-permission-resolver enable-role-based-authorization="true"/>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 重新启动 重启应用服务器
过程 6.4. 添加新用户到 BRMS 里
- 选择权限细节 从 navigation pane 里选择 Administration,然后选择 User Permissions。
- 添加用户映射 点击 按钮。在对话框里输入用户名,并点击 。- 注意 为该角色指定的用户名必须匹配验证服务里的一个用户名,否则它无法使用。
- 添加权限 详情请参考『过程 6.5, “管理用户权限”』。
过程 6.5. 管理用户权限
- 选择用户权限 从 navigation pane 里选择 Administration,然后选择 User Permissions。
- 选择用户 点击用户名旁边的 Open- 图 6.2. 权限细节 
- 分配用户权限 点击加号图标来添加权限,然后从 Permission type 下列菜单里选择合适的权限。点击 OK 进行确认。- 图 6.3. 编辑用户权限 
- 删除用户权限 点击要删除的权限旁边的减号图标,然后点击 OK 来确认。
- admin
- analyst
- package
注意
注意
重要
软件包管理员权限赋予对指定软件包的完全控制,包括部署的权利。但软件包管理员权限不赋予 JBoss 企业级 BRMS 平台其他部分的任何管理权限。
软件包开发人员权限允许用户在指定的软件包内创建和编辑条目。如创建和运行测试用例,但不包括部署软件包的权利。
只读软件包权限和 analyst read-only 权限类似,但它分配给软件包而不是类别。
6.3. 
	 规则软件包签名(Rule Package Signing)
重要
keytool 用来创建私有密钥和对应的公共数字证书。用私有密钥签名的软件包只可以用匹配的证书来检验。私有密钥存储在名为 keystore 的文件里,服务器用它来自动为每个软件包签名。被称为信任库(truststore)里的公共证书对于每个客户端应用程序可用。信任库里的证书用来检验签名软件包的真实性。在下载过程中已损坏或修改规则软件包将被客户端拒绝,因为其签名和证书不再匹配。
	- 创建一个私有签名密钥和对应的公共数字证书。
- 使私有签名密钥和公共数字证书对于密钥库里的服务器可用。
- 配置服务器以使用密钥库。
过程 6.6. 配置规则软件包签名
- 创建私有密钥 使用- keytool创建私有密钥:- keytool -genkey -alias ALIAS -keyalg RSA -keystore PRIVATE.keystore - keytool -genkey -alias ALIAS -keyalg RSA -keystore PRIVATE.keystore- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - -alias参数指定了用来链接密钥库里相关实体的名称。对于每个步骤都使用相同的别名。别名是不区分大小写的。- -keystore提供了将被创建以保存私有密钥的文件的名称。- keytool将提示你确定一些信息以及两个密码。第一个密码是密钥库密码。第二个密码是密钥密码,用于正创建的密钥。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建数字证书 使用- keytool创建数字证书:- keytool -export -alias ALIAS -file CERTIFICATE.crt -keystore PRIVATE.keystore - keytool -export -alias ALIAS -file CERTIFICATE.crt -keystore PRIVATE.keystore- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 使用和前一步骤相同的别名和密钥库。- -file参数指定要创建的新证书的名称。- -keystore参数指定私有密钥库的文件名。在提示符后输入密钥库的密码。- keytool -export -alias BRMSKey -file BRMSKey.crt -keystore PrivateBRMS.keystore - [localhost ]$ keytool -export -alias BRMSKey -file BRMSKey.crt -keystore PrivateBRMS.keystore Enter keystore password: Certificate stored in file <BRMSKey.crt>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 将数字证书导入到信任库 使用- keytool命令将数字证书导入到密钥库里:- keytool -import -alias ALIAS -file CERTIFICATE.crt -keystore PUBLIC.keystore - keytool -import -alias ALIAS -file CERTIFICATE.crt -keystore PUBLIC.keystore- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 这会创建一个新的密钥库和包含数字证书的信任库。信任库使数字证书可为客户端应用程序所用。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 将私有密钥库移至安全位置 私有密钥库需要保存在只有 JBoss 企业级 BRMS 平台服务器能够访问的安全位置。它可以在相同的机器或是安全的网络位置上。- 重要 JBoss 企业级 BRMS 平台不能为网络资源提供验证凭证。如果私有密钥库保存在安全的网络位置,那么任何验证过程都必须代替 JBoss 企业级 BRMS 平台服务器来执行,从而使得私有密钥库为之所用。例如,操作系统可以验证并挂载一个保存私有密钥库的共享文件为本地目录,以供 JBoss 企业级 BRMS 平台服务器进行访问。
- 将信任库移至公共位置 信任库需要可被客户端应用程序访问。这可以通过把信任库放在网络共享或 web 服务器上来实现。
- 设置 Drools 序列化属性 你需要在服务器上设置 Drools 序列化系统属性。这是存储访问密钥库所需信息的属性。因为 JBoss 企业级 BRMS 平台也包含客户组件,所以私有密钥库和信任库属性都需要进行设置。关于在哪里设置这些属性的细节,请参考『第 6.3.1 节 “设置序列化属性”』。需要设置的属性是:- drools.serialization.sign- 指定是否启用签名。它必须为- true。
- drools.serialization.private.keyStoreURL- 私有密钥库所在的 URL
- drools.serialization.private.keyStorePwd- 信任库的密码
- drools.serialization.private.keyAlias- 创建密钥库时使用的别名
- drools.serialization.private.keyPwd- 密钥密码
- drools.serialization.public.keyStoreURL- 信任库所在的 URL
- drools.serialization.public.keyStorePwd- 信任库的密码
 
- 加密密钥库凭证 密钥库密码目前是以明文进行存储的。关于加密密钥库凭证的说明,请参考『https://access.redhat.com/kb/docs/DOC-47247』。
- 关于如何配置客户端来使用签名的 Rule 软件包,请参考《BRMS 用户指南》。
6.3.1. 设置序列化属性
- JBoss Properties 服务
- 要用 JBoss Properties 服务设置属性,在/server/PROFILE/deploy/properties-service.xml文件里添加下列受管 bean 的配置,并用你的系统里的这些属性替换示例里的值。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 
- jboss-brm.war 属性文件
- 要在 jboss-brm.war 属性文件里设置属性,请添加下列代码到jboss-brms.war/WEB-INF/classes/preferences.properties文件里。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 
 
     
    