专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »编程综合 » 在 WebSphere Message Broker V7 中实现消息流安全性 »正文

在 WebSphere Message Broker V7 中实现消息流安全性

来源: 发布时间:星期三, 2010年6月9日 浏览:0次 评论:0
  消息流安全性概述

  在 IBM® WebSphere® Message Broker V6.1 或更新版本中(以下简称为 Message Broker)安全性管理使代理能够对条消息通过消息流传入身份执行端到端处理利用这种基于和消息相关身份访问控制就可使安全性独立于传输类型和消息格式 如果没有启用这种消息流安全性WebSphere Broker 中默认安全性工具将基于传输机制所提供安全性默认情况下代理使用代理服务用户 ID 作为代理身份并忽略消息中携带任何身份以这种方式来处理消息流中所有入站消息安全性管理将执行以下功能:

  从入站消息中提取身份

  验证身份

  将身份映射到替代身份

  授权替代身份或原始身份访问消息流

  通过出站消息传播替代身份或原始身份

  为了执行验证、映射和授权就需要使用外部安全提供者Message Broker 支持两种外部安全提供者:用于身份验证和授权轻量级目录访问协议(LDAP)和用于身份验证、映射和授权 IBM Tivoli® Federated Identity Manager(TFIM)

  安全性功能是使用安全性配置文件定义此文件通常由代理管理员创建安全性配置文件指定是否对消息流中消息身份执行身份验证、映射、授权和传播如果是应使用哪种外部安全提供者可在个代理上创建多个安全性配置文件并在个消息流中关联这些安全性配置文件将由安全性管理在运行时访问

  安全性配置文件中定义安全性功能是在消息流输入和输出/请求节点上执行支持运行时身份提取输入节点是 MQInput、HTTPInput 和 SOAPInput支持运行时身份传播输出/请求节点是 MQOutput、HTTPRequest、SOAPRequest 和 SOAPAsyncRequest每个输入、输出/请求节点都具有您在部署的前使用 WebSphere Message Broker Toolkit 中 Broker Archive 编辑器设定安全性配置文件属性

  在下文中我们将给出个举例为您展示如何设置消息流安全性要从本文中获得最大收益您应对 Message Broker 有基本认识还应了解如何创建、部署和调试消息流

  消息流创建

  如图 1 所示提供了两个预先构建消息流个接收 HTTP 请求个提供服务这些消息流用于演示安全性配置在 HTTPRequest_MF 消息流中HTTPInput 节点接收 http://localhost:7080/CustomerOrders/ProcessOrderServices 处 XML 消息HTTPRequest 节点 http://localhost:7080/OrderRequestService 处服务这是由 HTTPService_MF 消息流提供在 HTTPService_MF 消息流中ComputeResponse 节点生成响应 XML 消息这条消息将由 HTTPServiceReply 节点回发给 HTTPRequest_MF 相应地HTTPRequest_MF 中 HTTPReply 节点将响应提供给在 下面下载 部分中提供 Project InterChange 文件 MsgFlowSecurity_PI.zip 中可以找到消息流有关创建消息流信息请参见 Message Broker 信息中心 创建消息流

图 1. 预先构建消息流


  消息流安全性配置

  要设置消息流安全性您需要完成以下任务:

  在外部安全提供者中添加用户和组实体

  创建安全性配置文件

  配置消息流身份提取

  将安全性配置文件和消息流关联

  1. 在外部安全提供者中添加用户和组实体

  如上文所述消息流安全性实现依赖于外部安全性提供者本文中举例使用 Tivoli Directory Server V6.2(LDAP)作为外部安全性提供者这个 LDAP 服务器是在 localhost (Windows® XP) 默认端口 389 上运行Tivoli Directory Server 安装和配置不在本文讨论范围的内您需要在 LDAP 中创建表 1 所列实体这些实体位于已经构建目录树结构 ou=users,ou=wmbv7,o=ibm,c=us 的下

表 1. LDAP 中实体

用户 uid 识别名(DN) 口令 组
wmbuser1 wmbuser1 cn=wmbuser1,ou=users,ou=wmbv7,o=ibm,c=us user1pw cn=authorized,ou=users,ou=wmbv7,o=ibm,c=us
wmbuser2 wmbuser2 cn=wmbuser2,ou=users,ou=wmbv7,o=ibm,c=us user2pw  
wmbuser3 wmbuser3 cn=wmbuser3,ou=users,ou=wmbv7,o=ibm,c=us user3pw cn=authorized,ou=users,ou=wmbv7,o=ibm,c=us
wmbuser4 wmbuser4 cn=wmbuser4,ou=users,ou=wmbv7,o=ibm,c=us user4pw  
wmbuser5 wmbuser5 cn=wmbuser5,ou=users,ou=wmbv7,o=ibm,c=us user5pw cn=authorized,ou=users,ou=wmbv7,o=ibm,c=us



  登录 Tivoli Directory Server Web Administration Tool展开 Directory management单击 Add an entry 创建 wmbuser1 用户随后选择对象类 inetOrgPerson

  在 Required attributes 页面中填写所有字段如图 2 所示:

图 2. 在 LDAP 中创建用户


  查看原图(大图)



  在 Optional attributes 页面中填写至少个 uid 和 userPassword 字段随后单击 Finish

  重复上述步骤添加其他用户

  要创建授权组单击 Add an entry 并选择对象类 groupOfNames

  在 Required attributes 页面中填写字段如图 3 所示只有 wmbuser1、wmbuser3 和 wmbuser5 添加为组成员单击 Finish:

图 3. 在 LDAP 中创建组


  查看原图(大图)



  2. 创建安全性配置文件

  使用 Message Broker Explorer 中编辑器或 Message Broker 命令控制台中 mqsicreateconfigurableservice 命令创建安全性配置文件创建两个安全性配置文件 LDAP_SP1 和 LDAP_SP2如表 2 所示个使用 Explorer 创建个使用命令创建两个安全性配置文件均和 LDAP 关联两者的间差别就是口令——LDAP_SP1 使用纯文本显示LDAP_SP2 中使用 **** 掩藏

表 2. 安全性配置文件详情

SecurityProfile AuthenticationAuthentication Config Mapping AuthorizationAuthorization Config Propagation PasswordValue
LDAP_SP1 LDAPldap://localhost:389/ ou=users,ou=wmbv7,o=ibm,c=us NONE LDAPldap://localhost:389/cn=authorized, ou=users,ou=wmbv7,o=ibm,c=us TRUE PLAIN
LDAP_SP2 LDAPldap://localhost:389/ ou=users,ou=wmbv7,o=ibm,c=us NONE LDAPldap://localhost:389/cn=authorized, ou=users,ou=wmbv7,o=ibm,c=us TRUE MASK



  不能使用 LDAP 执行身份映射——您必须使用 Tivoli Federated Identity Manager

  使用 Message Broker Explorer

  打开 WebSphere Message Broker Explorer:右击 MB7BROKER 代理选择 Properties如图 4 所示 Message Broker Explorer 是 WebSphere MQ Explorer 扩展带有附加代理管理功能

  图 4. 在 WebSphere Message Broker Explorer 中打开代理属性



  查看原图(大图)



  选择 Security单击 Security profiles如图 5 所示:

  图 5. 代理安全性属性





  单击 Add 添加新安全性配置文件将其重命名为 LDAP_SP1使用 表 2 和表 3 中列出值填写字段如图 6 所示 使用 Message Broker Explorer 中编辑器即可通过 LDAP 主机、LDAP baseDN 和 LDAP uid attr 组合自动生成 Authentication Config 类似地也将通过 LDAP 主机和 LDAP 组 baseDN 组合生成 Authorization Config

  图 6. 添加安全性配置文件 LDAP_SP1



  查看原图(大图)



表 3. 安全性配置文件中 LDAP 字段介绍说明

字段 介绍说明 值
LDAP host 定义到 LDAP 服务器连接信息 ldap://localhost:389
LDAP baseDN 定义要验证所有用户基本 DN ou=users,ou=wmbv7,o=ibm,c=us
LDAP uid attr 定义传入用户名要映射到基本 DN 属性 默认值:uid
LDAP group baseDN 定义用户必须属于其成员才能授权基本 DN cn=authorized,ou=users,ou=wmbv7,o=ibm,c=us
LDAP group member attr 定义用于筛选搜索属性 默认值:member
LDAP search scope 定义执行基础或子树搜索 默认值:sub



  使用 mqsicreateconfigurableservice 命令

  您还可以使用 Message Broker 控制台中 mqsicreateconfigurableservice 命令创建安全性配置文件运行以下命令根据 表 2 中列出值创建安全性配置文件 LDAP_SP2:

mqsicreateconfigurableservice MB7BROKER -c SecurityProfiles -o LDAP_SP2 -n authentication, 
authenticationConfig,passwordValue,propagation,authorization,authorizationConfig -v "LDAP, 
\"ldap://localhost:389/ou=users,ou=wmbv7,o=ibm,c=us?uid\",MASK,TRUE,LDAP,\"ldap:// 
localhost:389/cn=authorized,ou=users,ou=wmbv7,o=ibm,c=us\"" 


  要列出 MB7BROKER 代理上所有安全性配置文件请使用以下 mqsireportproperties 命令:

mqsireportproperties MB7BROKER -c SecurityProfiles -o AllReportableEntityNames -r 
 
SecurityProfiles 
 Default_Propagation 
  authentication='NONE' 
  authenticationConfig='' 
  authorization='NONE' 
  authorizationConfig='' 
  keyStore='Reserved for future use' 
  mapping='NONE' 
  mappingConfig='' 
  passwordValue='PLAIN' 
  propagation='TRUE' 
  trustStore='Reserved for future use' 
 LDAP_SP1 
  authentication='LDAP' 
  authenticationConfig='ldap://localhost:389/ou=users,ou=wmbv7,o=ibm,c=us?uid' 
  authorization='LDAP' 
  authorizationConfig='ldap://localhost:389/cn=authorized,ou=users,ou=wmbv7,o=ibm,c=us' 
  keyStore='keystore.jks' 
  mapping='NONE' 
  mappingConfig='' 
  passwordValue='PLAIN' 
  propagation='TRUE' 
  trustStore='Reserved for future use' 
 LDAP_SP2 
  authentication='LDAP' 
  authenticationConfig='ldap://localhost:389/ou=users,ou=wmbv7,o=ibm,c=us?uid' 
  authorization='LDAP' 
  authorizationConfig='ldap://localhost:389/cn=authorized,ou=users,ou=wmbv7,o=ibm,c=us' 
  keyStore='keystore.jks' 
  mapping='' 
  mappingConfig='' 
  passwordValue='MASK' 
  propagation='TRUE' 
  trustStore='Reserved for future use' 


  如命令输出所示除了 LDAP_SP1 和 LDAP_SP2 的外还有个名为 Default_Propagation 安全性配置文件这是个预定义配置文件供输出/请求节点用于身份传播

  3. 配置消息流身份提取

  选择身份标识类型即可配置消息流上身份提取可选身份标识类型包括 Transport Default、Username、Username + Password 和 X.509 Certicate如果您选择了 Transport Default则将从传输级(如 HTTP 报头)检索用户名和口令如果传输层无法提供必要身份凭据如 MQ MQMD 报头仅提供了用户名但未包含口令则必须从传入消息体中获取身份信息如果选择了 Username + Password您就需要指定身份标识位置和身份口令位置如果选择了 X.509 Certicate则需要 SSL用户名将从所定义身份标识位置处检索

  显然身份提取仅适用于输入节点本文将介绍如何为身份提取配置 HTTPRequest_MF 消息流中 HTTPInput 节点和 HTTPService_MF 消息流中 HTTPService 节点:

  单击 HTTPRequest_MF 消息流中输入节点 HTTPInput在节点属性中选择 Security 标签

  保留默认值 Transport Default 身份标识类型如图 7 所示从 HTTP 报头中提取用户名和口令

  为 HTTPService_MF 消息流中 HTTPService 节点执行相同操作身份标识类型将更改为 Username + Password并在稍后测试中指定身份标识位置和身份口令位置如下文中 图 16 所示

  图 7. 选择身份标识类型



  查看原图(大图)



  如果消息流是使用 Message Broker SOAP 节点实现 Web 服务则可从通过恰当策略集和绑定定义 WS-Security 标识中获取身份

  4. 将安全性配置文件和消息流关联

  为了启用消息流安全性输入和输出/请求节点需要链接定义安全性操作和外部安全性提供者安全性配置文件将安全性配置文件和消息流中输入和请求节点相关联:

  创建个名为 MsgFlowSecurity.bar BAR 文件使用 Toolkit 将消息流添加到其中

  在 BAR 文件 Manage 选项卡中展开 HTTPRequest_MF 消息流并单击 HTTPInput 节点在消息流 Properties 选项卡 Security profile 字段中键入 LDAP_SP1如下面图 8 所示

  按照同样步骤为 HTTPRequest_MF 消息流中 HTTPRequest 节点和 HTTPService_MF 消息流中 HTTPService 节点设置 LDAP_SP2 安全性配置文件:

  图 8. 在 BAR 文件上设置安全性配置文件



  查看原图(大图)



  现在每个输入和请求阶段均和表 4 中列出个安全性配置文件相关联您可以在消息流级设置安全性配置文件属性以便在节点安全性配置文件属性留空时节点能够继承这些属性当然可将节点安全性配置文件属性设置为 No Security显式关闭安全性

表 4. 各输入和请求节点和安全性配置文件关联

节点 消息流 安全性配置文件 目
HTTPInput HTTPRequest_MF LDAP_SP1 验证、授权密码采用纯文本显示
HTTPRequest HTTPRequest_MF LDAP_SP2 身份传播密码使用 **** 隐藏
HTTPService HTTPService_MF LDAP_SP2 验证、授权密码使用 **** 隐藏



  消息流部署

  Message Broker Toolkit 用于将 BAR 文件部署到 MB7BROKER 代理(Message Broker V7 默认配置)默认执行组中在部署过程中将检查消息流中使用安全性配置文件是否存在如果代理未能发现任何安全性配置文件部署过程将失败并报错表示消息流中某些属性无法识别

  如果您修改了消息流重新生成了 BAR 文件那么可能会看到条警告消息表示可配置属性将被覆盖也就是说安全性配置文件属性将被重置为默认值(空)要更改此行为确保不丢失安全性配置文件名称应在生成 BAR 文件的前于 Prepare 选项卡上清除 Override configurable property 值:

  图 9. 设置 BAR 文件生成选项



  消息流安全性测试

  Message Broker Toolkit 中流调试器用于跟踪消息并捕捉任何安全性异常消息流节点的间设置了断点用于调试 NetTool V4.7.2 用作 HTTP 客户端 HTTPInput_MF 消息流NetTool 是款免费 Web 应用和 Web 服务调试工具——可以在 SourceForge 下载此工具您将测试两个场景:个使用从 HTTP 报头中提取身份测试消息流安全性功能个则使用从消息体中提取身份在执行测试的前请确保 MB7BROKER 代理上默认执行组和 LDAP 服务器例子正常运行

  检查从 HTTP 报头中提取身份安全性功能

  在 Toolkit 上打开默认透视图创建个流调试器例子将其附加到默认执行组上随后启动流调试器

  启动 NetTool单击 HTTP client 选项卡在 URL 字段中键入 http://localhost:7080/CustomerOrders/ProcessOrderServices载入测试文件 CustomerOrder1.xml如下所示:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- This message is for test scenario of extracting identity from HTTP header --> 
<!-- For example, use basic authentication UserName: wmbuser1, Password: user1pw --> 
<!-- Authentication: Basic d21idXNlcjE6dXNlcjFwdw --> 
<RequestMsg> 
 <CustomerOrder> 
  <PORequest> 
   <ItemNo>200</ItemNo> 
   <ItemQuantity>5</ItemQuantity> 
   <PersonName> 
    <FirstName>John</FirstName> 
    <LastName>Doe</LastName> 
   </PersonName> 
   <Address> 
    <Street>8501 IBM Dr</Street> 
    <City>Charlotte</City> 
    <ZipCode>28262</ZipCode> 
   </Address> 
  </PORequest> 
 </CustomerOrder> 
</RequestMsg> 


  在 Authentication 选项卡中选中 Use Basic Authentication提供用户名 wmbuser1 和口令 user1pw单击 Send HTTPRequest_MF 消息流:

  图 10. 在 NetTool HTTP 客户端上设置基本身份验证





  来自 HTTP 报头有效用户名和口令对验证成功并获得了授权 如流调试器中所示身份信息从 HTTP 报头中提取到了 Properties 文件夹中:

  图 11. 将身份信息提取到 Properties 文件夹中



  查看原图(大图)



  在流调试器上执行单步跳出身份信息将传播到 HTTPRequest 节点中并传递给 HTTPService_MF 消息流内 HTTPService 节点 如下面图 12 所示口令使用 **** 隐藏这是 HTTPService 节点中使用了 LDAP_SP2 安全性配置文件:

  图 12. 隐藏身份口令



  查看原图(大图)



  完成事务成功消息返回至 NetTool:

  图 13. 成功消息



  查看原图(大图)



  从第 3 步起重复测试提供不存在用户名 wmbuser8 和口令检查验证情况单击 Send 消息流

  在流调试器中将生成条身份验证异常表示用户 wmbuser8 不存在如图 14 所示由于身份验证失败因而对 HTTPRequest_MF 消息流访问也被拒绝:

  图 14. 异常列表中用户身份验证



  查看原图(大图)



  再次从第 3 步开始进行测试提供有效用户名 wmbuser2 和口令 user2pw检查授权单击 Send 消息流

  在流调试器中将生成条授权异常表示该用户不属于 Broker 授权组如图 15 所示这是 wmbuser2 并非授权组成员由于授权失败因而对 HTTPRequest_MF 消息流访问被拒绝:

  图 15. 异常列表中授权



  查看原图(大图)



  检查从消息体中提取身份安全性功能

  为了运行这个场景请重新配置消息流将身份标识类型从 Transport Default 更改为 Username + Password也就是说身份将从消息体中提取而不是从 HTTP 报头中提取

  在 Toolkit 中打开 HTTPRequest_MF 消息流单击 HTTPInput 节点在 Properties 选项卡上单击 Security

  从 Identity token type 字段下拉列表中选择 Username + Password使用 XPath 为 Identity token location 和 Identity password location 提供值如图 16 所示保存流以完成更改

  重复上述步骤对 HTTPService_MF 消息流中 HTTPService 节点做出相同更改:

  图 16. 配置从消息体中提取身份



  查看原图(大图)



  若流调试器已关闭请启动流调试器

  若 NetTool 已关闭请启动 NetTool载入测试文件 CustomerOrder2.xml如下所示单击 Send 消息流消息体中提供了用户名 wmbuser1 及其口令 user1pw:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- This message is for test scenario of extracting identity 
from the message body --> 
<RequestMsg> 
 <!-- The UserId and UserPassword need to be changed for various tests--> 
 <Security> 
  <UserId>wmbuser1</UserId> 
  <UserPassword>user1pw</UserPassword> 
 </Security> 
 <CustomerOrder> 
  <PORequest> 
   <ItemNo>200</ItemNo> 
   <ItemQuantity>5</ItemQuantity> 
   <PersonName> 
    <FirstName>John</FirstName> 
    <LastName>Doe</LastName> 
   </PersonName> 
   <Address> 
    <Street>8501 IBM Dr</Street> 
    <City>Charlotte</City> 
    <ZipCode>28262</ZipCode> 
   </Address> 
  </PORequest> 
 </CustomerOrder> 
</RequestMsg> 


  在流调试器中身份信息将显示在 Properties 文件夹中和上文中 图 11 相同但身份信息提取自消息体

  正如我们预期条成功响应返回至 NetTool我们提供是正确用户名和口令

  您可以修改测试消息 CustomerOrder2.xml为 UserID 和 UserPassword 提供不正确随后再次按照相同步骤通过 NetTool 消息流检查身份验证和授权功能

  除此的外您可以使用 cURL 命令工具 HTTP 可从 Softpedia 免费下载 cURL V7.19.7 在测试消息 CustomerOrder2.xml 中使用用户名 wmbuser3 和口令 user3pw 运行以下命令此时将返回成功响应消息体提供是正确凭据由于身份标识类型为 Username + Password因而安全性管理忽略了命令参数提供用户名 wmbuser8 和口令 user8pw:

curl --basic --data-binary @CustomerOrder2.xml -u wmbuser8:user8pw 
http://localhost:7080/CustomerOrders/ProcessOrderServices 
 
<ResponseMsg> 
  <CustomerOrder> 
   <OrderStatus>Available</OrderStatus> 
   <ItemNo>200</ItemNo> 
   <ItemQuantity>5</ItemQuantity> 
  </CustomerOrder> 
</ResponseMsg> 


  在测试消息 CustomerOrder2.xml 中使用不存在用户名 wmbuser8 和口令 user8pw 运行以下命令此时将返回 This server could not very that you are authorized to access the document requested" :

curl --basic --data-binary @CustomerOrder2.xml 
http://localhost:7080/CustomerOrders/ProcessOrderServices 
  
<html> 
 <head> 
  <META http-equiv="Content-Type" content="text/html; char=UTF-8"> 
  <titleg>401 Authorization Required</title> 
 </head> 
 <body> 
  <h1>401 Authorization Required</h1> 
  This server could not very that you are authorized 
  to access the document requested. 
 </body> 
</html> 


  结束语

  WebSphere Message Broker V6.1 及更新版本提供了个安全性管理用于实现消息流安全性以便根据消息例子中携带身份保护消息流要配置消息流安全性需要使用外部安全性提供者来强制实施安全性例如 Tivoli Directory Server需要创建安全性配置文件(或针对多种安全性需求多个安全性配置文件)来指定需要执行安全性功能(例如身份验证、授权和身份传播)和使用哪种外部安全性提供者还需要配置消息流指定如何从输入节点中提取身份、哪个安全性配置文件需要和输入和输出/请求节点相关联本文举例为您展示了如何实现安全性配置

  本文举例源代码或素材下载

标签:
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: