IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere  >

IBM WebSphere 开发者技术期刊: 保证 WebSphere Application Server 和 WebSphere MQ 之间连接的安全——第 2 部分

使用服务集成总线保证 WebSphere MQ 链接的安全

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 中级

Martin Smithson (msmiths@uk.ibm.com), 高级 IT 专家, IBM

2006 年 3 月 20 日

本文演示了如何配置 IBM® WebSphere® Application Server 服务集成总线和运行在 Windows® XP 上的 IBM WebSphere MQ 队列管理器之间的 SSL 连接。

摘自 IBM WebSphere 开发者技术期刊

引言

Java™ 2 Platform Enterprise Edition (J2EE™) 规范 1.3 版要求软件供应商在其应用服务器产品中包含 Java Message Service (JMS) 提供程序。IBM WebSphere Application Server V5.0 通过 WebSphere JMS 提供程序提供了此支持,此提供程序是 IBM WebSphere MQ 和 IBM WebSphere Business Integration Event Broker 的压缩版。不过,WebSphere JMS 提供程序无法与其他 WebSphere MQ 队列管理器进行通信。

WebSphere Application Server V6.0 通过将其替换为服务集成总线而突破了 WebSphere JMS 提供程序的这一限制。服务集成总线增强了内嵌在 WebSphere Application Server 中的消息传递功能,使其不仅限于 WebSphere Application Server V5.0 提供的功能。服务集成总线提供的主要增强功能之一是能够与现有 WebSphere MQ 队列管理器进行通信。此功能可实现在 WebSphere Application Server V6.0 环境中运行的消息传递应用程序和在 WebSphere MQ 环境中运行的消息传递应用程序的无缝集成。

本文将演示如何配置在 WebSphere Application Server V6.0 内运行的消息传递引擎和 WebSphere MQ 队列管理器之间的 SSL 连接。本文假定您具有 WebSphere Application Server V6.0、WebSphere MQ V5.3 或 V6.0 的工作知识,了解服务集成总线组件的概念和体系结构,并熟悉 第 1 部分:使用 WebSphere MQ JMS 提供程序中的内容。





回页首


WebSphere MQ 链接概述

在服务集成总线上定义外部总线实际上是在体系结构级定义两个总线之间的链接。当相关的外部总线表示 WebSphere MQ 网络时,此链接将在运行时通过建立特定消息传递引擎和 WebSphere MQ 队列管理器之间的发送方和接收方通道来实现。这些通道是通过定义 WebSphere MQ 链接在消息传递引擎上配置的。

对于使用 WebSphere MQ 链接配置的消息传递引擎,WebSphere MQ 队列管理器相当于外部总线。而对于 WebSphere MQ 队列管理器,消息传递引擎则相当于另一个 WebSphere MQ 队列管理器。配置 WebSphere MQ 链接时,管理员必须指定虚拟队列管理器名称。这个名称用于在远程 WebSphere MQ 队列管理器上表示此消息传递引擎。WebSphere MQ 队列管理器完全不知道它正在与消息传递引擎进行通信。

WebSphere MQ 链接发送方通道

WebSphere MQ 链接发送方通道建立到目标 WebSphere MQ 队列管理器上的接收方通道的连接。它会将消息从服务集成总线中使用的格式转换为 WebSphere MQ 使用的格式,然后将这些消息发送到目标 WebSphere MQ 队列管理器上的接收方通道。

配置 WebSphere MQ 链接发送方通道时,需要指定以下信息:

  • 通道的名称,必须与目标 WebSphere MQ 队列管理器上定义的接收方通道的名称完全匹配(包括大小写)。
  • 承载目标 WebSphere MQ 队列管理器的计算机的主机名称或 IP 地址
  • 目标 WebSphere MQ 队列管理器在其上侦听入站通信请求的端口的端口号
  • 出站传输链

如果目标 WebSphere MQ 队列管理器上的接收方通道仅接受 SSL 连接,则必须将该传输链与恰当的兼容 SSL 凭据集关联。

WebSphere MQ 链接接收方通道

WebSphere MQ 链接接收方通道支持 WebSphere MQ 队列管理器内的发送方通道,以建立到服务集成总线内的消息传递引擎的连接。它会将消息从 WebSphere MQ 内使用的格式转换为服务集成总线使用的格式。WebSphere MQ 链接接收方通道可模拟 WebSphere MQ 中接收方通道的行为。

配置 WebSphere MQ 链接接收方通道时,需要以下信息:

  • 通道的名称,必须与目标 WebSphere MQ 队列管理器上定义的发送方通道的名称完全匹配(包括大小写)。

入站传输链(WebSphere MQ 队列管理器上的发送方通道与之进行通信)依赖于 WebSphere MQ 发送方通道的配置。应咨询 WebSphere MQ 管理员,以确保对发送方通道进行恰当配置。InboundBasicMQLink 传输链在缺省情况下将侦听端口 5558 来获得与 WebSphere MQ 的连接,而 InboundSecureMQLink 传输链缺省情况下将侦听端口 5578 来获得与 WebSphere MQ 的连接。





回页首


安全 WebSphere MQ 链接

不安全的 WebSphere MQ 链接使用不安全的传输链与 WebSphere MQ 进行通信。WebSphere MQ 链接发送方通道使用 OutboundBasicMQLink 传输链与 WebSphere MQ 接收方通道进行通信。WebSphere MQ 发送方通道使用 InboundBasicMQLink 传输链与 WebSphere MQ 链接接收方通道进行通信。InboundBasicMQLink 传输链将侦听与 SIB_MQ_ENDPOINT_ADDRESS 关联的端口,该端口缺省设置为 5558。此配置如图 1 中所示。


图 1. WebSphere MQ 链接体系结构
WebSphere MQ 链接体系结构

若要在 WebSphere MQ 和 WebSphere Application Server 之间建立 SSL 连接,必须对此配置进行修改,以确保在 WebSphere Application Server 内使用安全传输链。缺省情况下,当创建应用服务器时,会创建一系列合适的传输链。这些传输链有:

  • InboundSecureMQLink
  • OutboundSecureMQLink

我们将需要修改 WebSphere MQ 链接发送方通道的配置,以便使用 OutboundSecureMQLink 传输链与 WebSphere MQ 接收方通道通信。我们还将需要修改 WebSphere MQ 发送方通道的配置,以便使用 InboundSecureMQLink 传输链与 WebSphere MQ 链接接收方通信。InboundSecureMQLink 传输链将侦听与 SIB_MQ_ENDPOINT_SECURE_ADDRESS 关联的端口,该端口缺省设置为 5578。安全 WebSphere MQ 链接的配置如图 2 中所示。


图 2. 安全 WebSphere MQ 链接体系结构
安全 WebSphere MQ 链接体系结构

这两个通道都与一个 SSL 配置表关联。此 SSL 配置表定义密钥文件和信任文件的位置,这些传输链将在与客户端或服务器建立 SSL 连接时使用这两个文件。例如,当 WebSphere MQ 发送方通道尝试与 WebSphere MQ 链接接收方通道建立连接时,将在 SSL 握手期间向 WebSphere MQ 提供密钥文件中包含的证书。由于 WebSphere MQ 队列管理器的密钥文件中包含对应的签名者证书,因此它将信任来自 WebSphere Application Server 的证书,并建立一个 SSL 连接。

还可以自己定义用于与 WebSphere MQ 通信的传输链。不过,这项工作被视为一项高级管理任务,不在本文的讨论范围之内。





回页首


配置 WebSphere MQ

本系列的第 1 部分描述了如何为 WebSphere MQ 队列管理器获取证书以及如何对 WebSphere MQ 队列管理器进行配置,以在建立 SSL 连接时使用此证书。配置发送方和接收方通道以与服务集成总线通信时,WebSphere MQ 队列管理器将使用相同的证书。

为了在 WebSphere MQ 队列管理器内配置发送方和接收方通道,必须执行以下步骤:

  1. 定义 WebSphere MQ 发送方通道
  2. 定义 WebSphere MQ 接收方通道
  3. 定义 WebSphere MQ 传输队列
  4. 定义远程队列定义

以下各部分对这些任务进行了详细描述。

A. 定义 WebSphere MQ 发送方通道

WebSphere MQ 发送方通道将用于把消息从 WebSphere MQ 队列管理器发送到服务集成总线。配置发送方通道时,我们将为 InboundSecureMQLink 使用缺省值。要配置 WebSphere MQ 发送方通道,请执行以下步骤:

  1. 登录到运行 WebSphere MQ 的计算机。

  2. 从命令窗口或外壳程序中执行 runmqsc 命令,如下所示:

    runmqsc testJMSQMgr

  3. 在 MQSC 命令行,输入以下命令,以定义发送方通道,其中 5578 是消息引擎的 InboundSecureMQLink 传输链的端口号:

    DEFINE CHANNEL(MQ_TO_WAS)
           CHLTYPE(SDR)
           CONNAME('localhost(5578)')
           XMITQ(QM_was)
           TRPTYPE(TCP)
           SSLCIPH(TRIPLE_DES_SHA_US)
           SSLPEER('CN=jmsclient,OU=issw,O=ibm,C=US')
    

    不要退出 MQSC 环境,因为将在后面部分中使用它。

加密规范和 SSLPEER

我们在本文中使用的加密规范 TRIPLE_DES_SHA_US 提供了一个相对较强的加密算法。应该对组织的安全需求进行评估,并考虑在必要的情况下采用备用密码。

WebSphere MQ 在通道上使用 SSLPEER 属性来检查接受哪个客户端证书的 Distinguished Name 值。在本例中,WebSphere Application Server 客户端证书匹配 DN“CN=jmsclient, ou=issw, o=ibm, c=US”(在 SSLPEER 属性中列出,因此是 WebSphere MQ 的可信实体)。如果不设置 SSLPEER,WebSphere MQ 将接受 VeriSign trial CA 发出的任何其他客户端证书。

B. 定义 WebSphere MQ 接收方通道

WebSphere MQ 接收方通道将用于从服务集成总线检索消息。要配置 WebSphere MQ 接收方通道,请执行以下步骤:

  1. 在 MQSC 命令行输入以下命令,以定义接收方通道:

    DEFINE CHANNEL(WAS_TO_MQ)
           CHLTYPE(RCVR)
           TRPTYPE(TCP)
           SSLCAUTH(REQUIRED)
           SSLCIPH(TRIPLE_DES_SHA_US)
           SSLPEER('CN=jmsclient,OU=issw,O=ibm,C=US')
    

    不要退出 MQSC 环境,因为将在后面部分中使用它。

C. 定义 WebSphere MQ 传输队列

WebSphere MQ 传输队列是临时存储将发送到远程队列管理器的消息的队列。至少必须为直接从本地队列管理器接受消息的每个远程队列管理器定义一个传输队列。要配置 WebSphere MQ 传输队列,请执行以下步骤:

  1. 在 MQSC 命令行输入以下命令,以定义传输队列:

    DEFINE QLOCAL(QM_WAS)
           USAGE(XMITQ)
           TRIGGER
           INITQ(SYSTEM.CHANNEL.INITQ)
           TRIGDATA(MQ_TO_WAS)
    

    不要退出 MQSC 环境,因为将在后面部分中使用它。

D. 定义远程队列定义

远程队列定义是本地队列管理器上的队列定义,此定义将引用远程队列管理器上的队列,或像本例中一样,引用服务集成总线上的队列。要配置远程队列定义,请执行以下步骤:

  1. 在 MQSC 命令行输入以下命令,以定义远程队列定义:

    DEFINE QREMOTE(TOWASQ)
           RNAME(FROMMQQ)
           RQMNAME(QM_WAS)
           XMITQ(QM_WAS)
    

  2. 键入 end,以退出 MQSC 环境。





回页首


为 WebSphere MQ 链接创建 SSL 配置表

正如 WebSphere MQ 链接安全部分所讨论的,InboundSecureMQLink 和 OutboundSecureMQLink 传输链与一个 SSL 配置表关联。更具体地说,它们与计算单元的缺省 SSL 配置表关联。在第 1 部分,此 SSL 配置表被配置为使用我们创建的密钥文件 (WASServerKeyFile) 和信任文件 (WASServerTrustFile)。此 SSL 配置表由计算单元内的 WebSphere Application Server 进程用于在启用安全功能时对其间传递的数据进行加密。在为 WebSphere MQ 链接配置安全设置时,不要使用此 SSL 配置表,因为 WebSphere MQ 链接所要求的对 SSL 配置表的任何更改都将影响计算单元内的进程间通信。

由于这个原因,我们将配置一个新的 SSL 配置表,以供 InboundSecureMQLink 和 OutboundSecureMQLink 传输链使用。为了简单起见,这个新 SSL 配置表将和前面一样使用相同的密钥文件和信任文件。不过,仍然可以使用不同的密钥文件和信任文件来对 WebSphere Application Server 和 WebSphere MQ 间的通信进行加密。

另外,由于我们已经为 WebSphere MQ 内的发送方和接收方通道指定了密码规范 TRIPLE_DES_SHA_US,因此我们还必须在 InboundSecureMQLink 和 OutboundSecureMQLink 传输链使用的新 SSL 配置表上指定对应的密码套件,以便建立 SSL 连接。下表给出了 WebSphere MQ 密码规范和关联的 JSSE 密码套件的列表。

WebSphere MQ 密码规范 Associated JSSE 密码套件
NULL_MD5SSL_RSA_WITH_NULL_MD5
NULL_SHASSL_RSA_WITH_NULL_SHA
RC4_MD5_EXPORTSSL_RSA_EXPORT_WITH_RC4_40_MD5
RC4_MD5_USSSL_RSA_WITH_RC4_128_MD5
RC4_SHA_USSSL_RSA_WITH_RC4_128_SHA
RC2_MD5_EXPORTSSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5
DES_SHA_EXPORTSSL_RSA_WITH_DES_CBC_SHA
TRIPLE_DES_SHA_USSSL_RSA_WITH_3DES_EDE_CBC_SHA

必须执行以下步骤来创建新的 SSL 配置表,并配置 InboundSecureMQLink 和 OutboundSecureMQLink 传输链以使用该 SSL 配置表:

  1. 创建 SSL 配置表
  2. 修改 InboundSecureMQLink
  3. 修改 OutboundSecureMQLink

以下各部分对这些任务进行了详细描述。

A. 创建 SSL 配置表

要创建 SSL 配置表,请执行以下步骤:

  1. 登录到 WebSphere Application Server 管理控制台。

  2. 在左边的导航窗格中选择 Security => SSL

  3. 在主内容窗格中,单击 New JSSE repertoire 按钮(图 3)。


    图 3. 创建 SSL 配置表
    创建 SSL 配置表
  4. 在“Alias”输入字段中输入 WMQLinkSSLSettings

  5. 在 Cipher suites 部分中,选择左边列表中的 SSL_RSA_WITH_3DES_EDE_CBC_SHA 密码套件。

  6. 单击 Add >>

  7. 选定的 SSL_RSA_WITH_3DES_EDE_CBC_SHA 密码套件现在将出现在右边的列表中(图 4)。以这种方式指定的密码套件将覆盖与指定的安全级别关联的任何密码套件。


    图 4. 指定密码套件
    指定密码套件
  8. 在“Key file name”输入字段中指定到 WASServerKeyFile.jks 文件的完整路径。

  9. 在“Key file password”输入字段中输入密钥文件的密码,并确保为“Key file format”指定了 JKS(图 5)。


    图 5. 指定密钥文件
    指定密钥文件
  10. 在“Trust file name”输入字段中指定到 WASServerTrustFile.jks 文件的完整路径。

  11. 在“Trust file password”输入字段中输入信任文件的密码,并确保为“Trust file format”指定了 JKS(图 6)。


    图 6. 指定信任文件
    指定信任文件
  12. 单击 OK

  13. 新的 SSL 配置表将随即出现在计算单元内定义的 SSL 配置表列表中。请注意,新的 SSL 配置表是在计算单元级定义的。

  14. 保存更改,并与各个节点就其进行同步。

B. 修改 InboundSecureMQLink

需要对 InboundSecureMQLink 传输链进行修改,以使其与新的 SSL 配置表关联。可以通过使用 WebSphere 管理控制台完成此工作。要修改 InboundSecureMQLink 传输链,请执行以下步骤:

  1. 在左边的导航窗格中选择 Servers => Application servers

  2. 在主内容窗格中,从应用服务器列表中选择 server1 链接。

  3. 在 Server messaging 下选择 WebSphere MQ link inbound transports(图 7)。


    图 7. 查看 WebSphere MQ 链接入站传输
    查看 WebSphere MQ 链接入站传输
  4. 从传输链列表中选择 InboundSecureMQLink 链接。

  5. 从传输通道列表中选择 SSL Inbound Channel (SIB_SSL_MQFAP) 链接(图 8)。


    图 8. 查看 SSL 人站通道
    查看 SSL 入站通道
  6. 从 SSL repertoire 下拉列表中选择新的 SSL 配置表(图 9)。


    图 9. 指定 SSL 配置表
    指定 SSL 配置表
  7. 单击 OK

  8. 保存更改,并与各个节点就其进行同步。

C. 修改 OutboundSecureMQLink

需要对 OutboundSecureMQLink 传输链进行修改,以使其与新的 SSL 配置表关联。目前,仅能使用 wsadmin 命令行环境完成此任务。要修改 OutboundSecureMQLink 传输链,请执行以下步骤:

  1. 登录到运行 WebSphere Application Server 部署管理器的计算机。

  2. 从命令窗口或外壳程序中,转到 <WAS_PROFILE_ROOT>\bin 目录并执行 wsadmin 命令,如下所示:

    wsadmin localhost 8879
    

  3. 由于启用了全局安全性,因此将提示输入用户 ID/密码。输入 WebSphere Application Server 管理员 ID 和密码,然后选择 OK

  4. 我们要做的第一件事是确定需要修改哪个出站通道。在 wsadmin 命令行输入以下命令:

    wsadmin>$AdminConfig list SSLOutboundChannel
    SIB_SSL_JFAP_SSL_OUT(cells/MQJmsSSLCell/nodes/MQJmsSSLNode/servers/server1|server.xml#SSLOutboundChannel_
    1132565466173)
    SIB_SSL_JFAP_TUN_SSL_OUT(cells/MQJmsSSLCell/nodes/MQJmsSSLNode/servers/server1|server.xml#SSLOutboundChan
    nel_1132565466174)
    SIB_SSL_MQFAP_SSL_OUT(cells/MQJmsSSLCell/nodes/MQJmsSSLNode/servers/server1|server.xml#SSLOutboundChannel
    _1132565466172)

  5. 请注意,为 server1 定义了三个 SSL 出站通道(如果在环境中定义了更多的服务器,将在列表中看到更多的条目)。我们所感兴趣的是 SIB_SSL_MQFAP_SSL_OUT 出站通道,即上面列表中的第三个。为了简化后续命令,我们会将此出站通道的 ID 存储在变量中。在 wsadmin 命令行输入以下命令:

    wsadmin>set outboundSecureMQLink [lindex [$AdminConfig list SSLOutboundChannel] 2]
    SIB_SSL_MQFAP_SSL_OUT(cells/MQJmsSSLCell/nodes/MQJmsSSLNode/servers/server1|server.xml#SSLOutboundChannel_
    1132565466172)

  6. outboundSecureMQLink 变量现在包含 SIB_SSL_MQFAP_SSL_OUT 出站通道的 ID(请注意,lindex 命令使用的是从零开始进行索引的列表)。现在我们需要修改此通道,以使用新的 SSL 配置表。在 wsadmin 命令行输入以下命令:

    wsadmin>$AdminConfig modify $outboundSecureMQLink {{sslConfigAlias MQJmsSSLCell/WMQLinkSSLSettings}}
    wsadmin>$AdminConfig save
    wsadmin>quit
    

    请注意,在上面的 modify 命令中,SSL 配置表的名称的范围仅指定到计算单元。请将该名称修改为您环境中的计算单元名称。





回页首


配置服务集成总线

必须执行以下步骤,以在 WebSphere Application Server 环境中配置服务集成总线:

以下各部分对这些任务进行了详细描述。

A. 创建服务集成总线

端到端安全性

为了简化此示例,没有为总线指定引擎间的传输链。因此,如果向总线添加了其他成员,将不会加密对应消息传递引擎间的通信。如果需要在消息通过总线时提供端到端安全性,请参阅 WebSphere Application Server V6 advanced security hardening

WebSphere Application Server V6 内的服务集成总线(或总线)只是一个体系结构概念。它允许管理员将提供总线的消息传递功能的资源集合分组到一起。在运行时,总线会将这些协作消息传递资源作为单个实体提供给应用程序,而对这些应用程序隐藏总线如何配置以及总线上的不同资源位于何处的详细信息。

各个资源是在特定总线的范围内创建或添加到其中的。直接在 WebSphere 计算单元中定义总线对计算单元内运行的任何组件都没有影响。只有向总线添加了成员,才会影响应用服务器内的运行时组件。

要创建服务集成总线,请执行以下步骤:

  1. 在左边的导航窗格中选择 Service Integration => Buses

  2. 在主内容窗格中,单击 New 按钮(图 10)。


    图 10. 创建服务集成总线
    创建服务集成总线
  3. 在“Name”输入字段中输入 TestBus(图 11)。


    图 11. 指定总线名称
    指定总线名称
  4. 单击 OK 按钮。

  5. 将更改保存到主配置中,并与各个节点就更改进行同步。

  6. 现在应在总线列表中显示新创建的服务总线 TestBus(图 12)。


    图 12. 服务集成总线列表
    服务集成总线列表

B. 向服务集成总线添加成员

总线成员就是作为总线成员添加的应用服务器或应用服务器集群。将应用服务器或应用服务器集群作为总线成员添加时,将自动在所涉及的总线成员上定义一系列资源。就服务集成总线提供的功能而言,自动定义的最重要资源是消息传递引擎。

要向服务集成总线添加成员,请执行以下步骤:

  1. 在左边的导航窗格中选择 Service Integration => Buses

  2. 在主内容窗格中,从总线列表中选择 TestBus 链接。

  3. 在 Topology 下选择 Bus members 链接(图 13)。


    图 13. 添加总线成员
    添加总线成员
  4. 单击 Add 按钮。

  5. 在 Add a new bus member 向导的 Step 1: Select server or cluster 中,确保选中了 Server 单选按钮。

  6. 从 Server 下拉列表中选择 server1(图 14)。


    图 14. 选择新的总线成员
    选择新的总线成员
  7. 单击 Next

  8. 单击 Finish

  9. 将更改保存到主配置中,并与各个节点就更改进行同步。

C. 定义外部总线

服务集成总线可以配置为连接到其他消息传递网络,并与其交换消息。为了完成此工作,必须配置一个外部总线。外部总线对与远程消息传递网络相关的信息(如外部总线的类型以及是否允许消息传递源程序向外部总线发送消息等)进行封装。外部总线可以表示:

  • 和本地总线一样位于相同的 WebSphere Application Server V6 计算单元中的服务集成总线。
  • 位于与本地总线不同的 WebSphere Application Server V6 计算单元中的服务集成总线。
  • WebSphere MQ 网络。

要定义外部总线,请执行以下步骤:

  1. 在左边的导航窗格中选择 Service Integration => Buses

  2. 在主内容窗格中,从总线列表中选择 TestBus 链接。

  3. 在 Topology 下选择 Foreign buses 链接(图 15)。


    图 15. 添加外部总线
    添加外部总线
  4. 单击 New 按钮。

  5. 在 Create foreign bus routing definition 向导的 Step 1: Foreign bus properties 中的“Name”输入字段中输入 testJMSQMgr

  6. 确保选中了 Send allowed 复选框(图 16)。


    图 16. 指定外部总线名称
    指定外部总线名称
  7. 单击 Next

  8. Step 2: Routing definition type 中的 Routing type 下拉列表中选择 Direct, WebSphere MQ Link(图 17)。


    图 17. 指定路由定义类型
    指定路由定义类型
  9. 单击 Next

  10. Step 3: Routing definition properties 中,在“Inbound user ID”输入字段中输入用户 ID(图 18)。此用户 ID 必须为 WebSphere 用户注册表中有效的用户 ID。此用户 ID 将分配给从 WebSphere MQ 队列管理器到达服务集成总线的消息,用于确定是否授权将消息放置到目标总线目的地上。


    图 18. 指定入站用户 ID
    指定入站用户 ID
  11. 单击 Next

  12. 单击 Finish

  13. 将更改保存到主配置中,并与各个节点就更改进行同步。

D. 创建目的地

服务集成总线内的目的地是一个逻辑地址,应用程序可以作为消息生产者和/或消息使用者附加到该地址,以交换消息。我们将要配置的目的地的类型有:

  • 队列目的地,可以配置为进行点到点消息传递的目的地。
  • 别名目的地,可以配置为引用另一个目的地(可能位于外部总线上)的目的地。此类目的地可为消息传递应用程序提供额外的间接寻址方式。别名目的地还可以用于覆盖在目标目的地中指定的某些值,如缺省可靠性和最大可靠性。

要定义目的地,请执行以下步骤:

  1. 在左边的导航窗格中选择 Service Integration => Buses

  2. 在主内容窗格中,从总线列表中选择 TestBus 链接。

  3. 在 Destination resources 下选择 Destinations 链接(图 19)。


    图 19. 创建目的地
    创建目的地
  4. 单击 New 按钮。

  5. 选择 Queue 单选按钮,以指定目的地类型(图 20)。


    图 20. 选择队列目的地类型
    选择队列目的地类型
  6. 单击 Next 按钮。

  7. 在 Create new queue 向导的 Step 1: Set queue attributes 中的“Identifier”输入字段中输入 FROMMQQ(图 21)。


    图 21. 指定队列标识符
    指定队列标识符
  8. 单击 Next 按钮。

  9. Step 2: Assign the queue to a bus member 中,从 Bus member 下拉列表中选择 server1(图 22)。


    图 22. 将队列分配给总线成员
    将队列分配给总线成员
  10. 单击 Next 按钮。

  11. 单击 Finish

  12. 新的队列目的地将显示在总线的目的地列表中。我们现在需要创建一个别名目的地,以作为 WebSphere MQ 队列管理器所承载的队列的别名。

  13. 单击 New 按钮。

  14. 选择 Alias 单选按钮,以指定目的地类型(图 23)。


    图 23. 选择 Alias 目的地类型
    选择 Alias 目的地类型
  15. 单击 Next 按钮。

  16. 在 Create new alias destination 向导的 Step 1: Set alias destination attributes 中的“Identifier”输入字段中输入 TOMQQ

  17. 从 Bus 下拉列表中选择 TestBus

  18. 从 Target bus 下拉列表中选择 testJMSQMgr

  19. 在 Target identifier 下拉列表中选择 other, please specify,然后在出现的输入字段中输入 FROMWASQ(图 24)。这是 WebSphere MQ 队列管理器上的一个队列的名称,此目的地是该队列的别名。


    图 24. 指定别名目的地属性
    指定别名目的地属性
  20. 单击 Next 按钮。

  21. 单击 Finish

  22. 将更改保存到主配置中,并与各个节点就更改进行同步。

E. 定义 WebSphere MQ 链接

前面对 WebSphere MQ 链接进行了详细描述。要定义 WebSphere MQ 链接,请执行以下步骤:

  1. 在左边的导航窗格中选择 Service Integration => Buses

  2. 在主内容窗格中,从总线列表中选择 TestBus 链接。

  3. 在 Topology 下选择 Messaging engines 链接(图 25)。


    图 25. 查看总线内的消息传递引擎
    查看总线内的消息传递引擎
  4. 应该只为 TestBus 列出了一个消息传递引擎。选择此消息传递引擎的链接。

  5. 在 Additional Properties 下选择 WebSphere MQ links 链接(图 26)。


    图 26. 查看消息传递引擎的 WebSphere MQ 链接
    查看消息传递引擎的 WebSphere MQ 链接
  6. 单击 New 按钮。

  7. 在 Create new WebSphere MQ link 向导的 Step 1: General WebSphere MQ link properties 中的“Name”输入字段中输入 TestJMSQMgrLink

  8. 从 Foreign bus name 下拉列表中选择 testJMSQMgr

  9. 在“Queue manager name”输入字段中输入 QM_WAS(图 27)。此处输入的队列管理器名称是一个虚拟队列管理器名称,WebSphere MQ 使用这个名称来引用此消息传递引擎。


    图 27. 指定常规 WebSphere MQ 链接属性
    指定常规 WebSphere MQ 链接属性
  10. 单击 Next 按钮。

  11. Step 2: Sender channel WebSphere MQ link properties 的“Sender MQ channel name”输入字段中输入 WAS_TO_MQ。此名称必须与在 WebSphere MQ 内配置的接收方通道的名称匹配。

  12. 在“Host name”输入字段中输入 localhost

  13. 在“Port”输入字段中输入 1414

  14. 从 Transport chain 下拉列表中选择 OutboundSecureMQLink(图 28)。在为 WebSphere MQ 链接创建 SSL 配置表部分中已经将 OutboundSecureMQLink 传输链与 WMQLinkSSLSettings SSL 配置表关联了,而这个 SSL 配置表指定了与 WebSphere MQ 发送方和接收方通道中定义的密码规范对应的密码套件。


    图 28. 指定发送方通道 WebSphere MQ 链接属性
    指定发送方通道 WebSphere MQ 链接属性
  15. 单击 Next 按钮。

  16. Step 3: Receiver channel WebSphere MQ link properties 的“Receiver MQ channel name”输入字段中输入 MQ_TO_WAS。此名称必须与在 WebSphere MQ 内配置的发送方通道的名称匹配(图 29)。


    图 29. 指定接收方通道 WebSphere MQ 链接属性
    指定接收方通道 WebSphere MQ 链接属性
  17. 单击 Next 按钮。

  18. 单击 Finish

  19. 将更改保存到主配置中,并与各个节点就更改进行同步。





回页首


配置 JMS 管理的对象

现在已经配置了服务集成总线上需要的所有对象。不过,在示例应用程序使用这些对象前,我们还需要定义一系列 JMS 管理的对象,以便示例应用程序能够使用 JMS 1.1 API 与它们进行交互。我们还将创建两个 JMS 队列对象,以供示例应用程序使用。之所以要这样,是因为示例应用程序现在将使用我们所配置的 TOMQQ 别名目的地向 WebSphere MQ 发送消息,但却无法浏览此别名上的消息。它只能浏览其所连接到的服务集成总线承载的队列目的地上的消息。因此,我们将创建第二个 JMS 队列对象,示例应用程序将使用此对象来浏览 FROMMQQ

必须执行以下步骤,以在 WebSphere Application Server 环境中配置 JMS 管理的对象:

  1. 创建 JMS 队列连接工厂
  2. 创建 JMS 队列

以下各部分对这些任务进行了详细描述。

端到端安全性

为了简化此示例,未为连接工厂指定任何目标入站传输链。因此,不会对 JMS 客户端和服务集成总线之间的通信进行加密。如果需要在消息通过总线时提供端到端安全性,请参阅 WebSphere Application Server V6 advanced security hardening

A. 创建 JMS 队列连接工厂

要定义 JMS 队列连接工厂对象,请执行以下步骤:

  1. 在左边的导航窗格中选择 Resources => JMS Providers => Default messaging

  2. 在主内容窗格的 Connection Factories 下,选择 JMS connection factory 链接(图 30)。


    图 30. 创建 JMS 连接工厂
    创建 JMS 连接工厂
  3. 单击 New 按钮。

  4. Administration 属性部分的“Name”输入字段中输入 TestBusCF

  5. 在“JNDI name”输入字段中输入 jms/TestBusCF

  6. 在 Connection 属性部分中,从 Bus name 下拉列表中选择 TestBus(图 31)。


    图 31. 指定 JMS 连接工厂属性
    指定 JMS 连接工厂属性
  7. 单击 OK

  8. 将更改保存到主配置中,并与各个节点就更改进行同步。

B. 创建 JMS 队列

要定义 JMS 队列管理的对象,请执行以下步骤:

  1. 在左边的导航窗格中选择 Resources => JMS Providers => Default messaging

  2. 在主内容窗格中的 Destinations 下,选择 JMS queue 链接。

  3. 单击 New 按钮。

  4. 在 Administration 属性部分“Name”输入字段中输入 FROMMQQ

  5. 在“JNDI name”输入字段中输入 jms/FROMMQQ

  6. 在 Connection 属性部分中,从 Bus name 下拉列表中选择 TestBus

  7. 从 Queue name 下拉列表中选择 FROMMQQ(图 32)。


    图 32. 指定 JMS 队列属性
    指定 JMS 队列属性
  8. 单击 OK

  9. 单击 New 按钮。

  10. 在 Administration 属性部分的“Name”输入字段中输入 TOMQQ

  11. 在“JNDI name”输入字段中输入 jms/TOMQQ

  12. 在 Connection 属性部分中,从 Bus name 下拉列表中选择 TestBus

  13. 从 Queue name 下拉列表中选择 TOMQQ(图 33)。


    图 33. 指定 JMS 队列属性
    指定 JMS 队列属性
  14. 单击 OK

  15. 将更改保存到主配置中,并与各个节点就更改进行同步。





回页首


修改示例应用程序的部署属性

示例应用程序当前配置为使用在 WebSphere MQ JMS 提供程序上配置的资源。为了让示例应用程序能够访问服务集成总线上的资源,必须执行若干步骤。这些步骤并不仅限于修改应用程序的资源引用映射。还必须执行一些与安全相关性的操作。这样做的原因是,当在 WebSphere Application Server 内启用了全局安全性时,所有服务集成总线资源都会得到保护。这些资源中的大部分都限制为供经过 WebSphere 身份验证的用户访问。管理员可以进一步对服务集成总线资源的访问进行限制,而仅允许特定用户或组进行访问。

必须执行以下步骤,以修改示例应用程序的部署属性:

  1. 定义 J2C 身份验证别名,以便连接到服务集成总线
  2. 修改示例应用程序的资源引用映射
  3. 修改示例应用程序的资源环境项引用映射
  4. 修改外部总线角色

以下各部分对这些任务进行了详细描述。

A. 定义 J2C 身份验证别名,以便连接到服务集成总线

第一步是定义 J2C 身份验证别名。示例应用程序将在尝试进行连接时使用此别名,以便能通过服务集成总线的身份验证。要创建 J2C 身份验证别名,请执行以下步骤:

  1. 在左边的导航窗格中选择 Security => Global security

  2. 在主内容窗格中的 Authentication 下,选择 JAAS Configuration => J2C Authentication data(图 34)。


    图 34. 创建 J2C 身份验证别名
    创建 J2C 身份验证别名
  3. 单击 New 按钮。

  4. 在“Alias”输入字段中输入 sibusAlias

  5. 在“User ID”字段中输入合适的用户 ID。此用户 ID 必须为 WebSphere 用户注册表中有效的用户 ID。

  6. 在“Password”输入字段中输入此用户的密码(图 35)。


    图 35. 指定 J2C 身份验证别名属性
    指定 J2C 身份验证别名属性
  7. 单击 OK

  8. 将更改保存到主配置中,并与各个节点就更改进行同步。

B. 修改示例应用程序的资源引用映射

我们现在需要修改示例应用程序使用的资源引用映射,以便能够连接到服务集成总线。要完成此任务,请执行以下步骤:

  1. 在左边的导航窗格中选择 Applications => Enterprise Applications

  2. 在主内容窗格中选择 JmsTestEAR

  3. 在 Additional Properties 下选择 Map resource references to resources(图 36)。


    图 36. 修改资源引用映射
    修改资源引用映射
  4. 为在示例应用程序中定义的资源引用选中这两个复选框。

  5. 从 Specify existing Resource JNDI name 下拉列表框中选择 jms/TestBusCF

  6. 单击此列表框旁边的 Apply 按钮(图 37)。


    图 37. 指定 JNDI 名称
    指定 JNDI 名称
  7. 为在示例应用程序中定义的资源引用选中这两个复选框。

  8. 在 Specify authentication method 部分选择 Use default method 单选按钮

  9. 从 Select authentication data 输入下拉列表框中选择 sibusAlias

  10. 单击 Apply 按钮(图 38)。


    图 38. 指定身份验证数据项
    指定身份验证数据项
  11. 单击 OK

  12. 将更改保存到主配置中,并与各个节点就更改进行同步。

C. 修改示例应用程序的资源环境项引用映射

资源环境项引用由示例应用程序用于确定将浏览或将消息发送到哪个目的地。正如前面所讨论的,为了显示通过 WebSphere MQ 链接在两个方向传递的消息,我们必须使用不同的目的地来在示例应用程序中进行浏览和发送操作。为此,我们必须将示例应用程序的每个模块中的资源环境项引用映射到不同的 JMS 队列。要完成此任务,请执行以下步骤:

  1. 在左边的导航窗格中选择 Applications => Enterprise Applications

  2. 在主内容窗格中选择 JmsTestEAR

  3. 在 Additional Properties 下选择 Map resource env entry references to resources(图 39)。


    图 39. 修改资源环境项引用映射
    修改资源环境项引用映射
  4. 在 JmsTestEJB 模块的“JNDI name”输入字段中输入 jms/TOMQQ

  5. 在 JmsTestWeb 模块的“JNDI name”输入字段中输入 jms/FROMMQQ(图 40)。


    图 40. 指定 JNDI 名称
    指定 JNDI 名称
  6. 单击 OK

  7. 将更改保存到主配置中,并与各个节点就更改进行同步。

D. 修改外部总线角色

在 WebSphere Application Server 内启用了全局安全性时,所有服务集成总线资源都会得到保护。这些资源中的大部分都限制为供通过 WebSphere 身份验证的用户访问。管理员可以进一步对服务集成总线资源的访问进行限制,而仅允许特定用户或组进行访问。

不过在安全总线中,外部总线是在缺省情况下不允许访问的资源。为了让示例应用程序访问与 testJMSQMgr 外部总线相关的资源,我们必须将相关用户添加到外部总线的 sender 角色中。要完成此任务,请执行以下步骤:

  1. 登录到运行 WebSphere Application Server 部署管理器的计算机。

  2. 从命令窗口或外壳程序中,转到 <WAS_PROFILE_ROOT>\bin 目录并执行 wsadmin 命令,如下所示:

    wsadmin localhost 8879
    

  3. 由于启用了全局安全性,因此将提示输入用户 ID/密码。输入 WebSphere Application Server 管理员 ID 和密码,然后单击 OK

  4. 在 wsadmin 命令行输入以下命令:

    wsadmin>$AdminTask addUserToForeignBusRole {-bus TestBus -foreignBus testJMSQMgr -role sender -user wasuser}
    wsadmin>$AdminConfig save
    wsadmin>quit
    





回页首


验证 WebSphere MQ 链接连接

设置现在已完成。不过,为了确保我们所做的所有更改都有效,需要重新启动计算单元内的所有 WebSphere Application Server 进程(部署管理器、节点代理和应用服务器)。然后,我们将组合使用各种工具来验证消息可以通过 WebSphere MQ 链接在两个方向传输。重新启动各个 WebSphere Application Server 进程后,执行以下部分中的步骤来验证每个方向的连接:

  1. 验证 WebSphere MQ 到 WebSphere Application Server 的连接
  2. 验证 WebSphere Application Server 到 WebSphere MQ 的连接

A. 验证 WebSphere MQ 到 WebSphere Application Server 的连接

要验证从 WebSphere MQ 到 WebSphere Application Server 的连接,我们需要将消息发送到前面定义的远程队列 TOWASQ。幸运的是,WebSphere MQ 提供了进行此操作的实用程序,称为 amqsput。要使用此实用程序发送消息,请执行以下步骤:

  1. 登录到运行 WebSphere MQ 的计算机。

  2. 从命令窗口或外壳程序中运行 amqsput 实用程序,如下所示:

    amqsput TOWASQ testJMSQMgr
    

  3. amqsput 实用程序将显示一条指示目标队列的消息。键入将置入测试消息中的文件,例如,Test message from WebSphere MQ!!!

  4. 按两次 Enter

  5. 现在可以验证消息是否到达了服务集成总线上的 FROMMQQ,方法是打开浏览器,并转到以下 URL (图 41)。


    图 41. 验证 WebSphere MQ 到 WebSphere Application Server 的连接
    验证 WebSphere MQ 到 WebSphere Application Server 的连接

B. 验证 WebSphere Application Server 到 WebSphere MQ 的连接

可以使用示例应用程序将消息从 WebSphere Application Server 发送到 WebSphere MQ 承载的 FROMWASQ 队列。不过,将需要使用 WebSphere MQ Explorer 或 MQSC 命令行环境来验证消息已经送达。要完成此任务,请执行以下步骤:

  1. 使用示例应用程序内的 Send a JMS Message 连接像前面一样发送消息。

  2. 登录到运行 WebSphere MQ 的计算机。

  3. 从命令窗口或外壳程序中执行 runmqsc 命令,如下所示:

    runmqsc testJMSQMgr
    			

  4. 在 MQSC 命令行输入以下命令:

    DISPLAY QUEUE(FROMWASQ) CURDEPTH
    

  5. 此命令的输出应该显示队列当前的深度为 1 条消息“CURDEPTH(1)”





回页首


结束语

本文描述了如何在 WebSphere Application Server V6.0 内配置 WebSphere MQ 链接,以使用 SSL 与 WebSphere MQ 队列管理器进行通信。





回页首


致谢

我要感谢 Keys Botzum、Sree Anand Ratnasinghe、Patrick Nogay、Graham Hopkins 和 Roland Barcia 提供的大量技术帮助和专家意见。



参考资料



关于作者

Martin Smithson 是 IBM Software Group 在英国的一名高级 IT 专家。他有九年的 IT 行业工作经验,过去四年在 EMEA IBM Software Services for WebSphere 团队担任技术顾问。他擅长的专业领域包括 J2EE 应用程序的体系结构、设计和开发。他还是 IBM WebSphere Application Server 方面的专家。他拥有伦敦城市大学软件工程方面的学位。他也是“WebSphere Application Server V6: System Management & Configuration Handbook”一书的合著者。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款