使用 WebSphere MQ Telemetry 提供安全的物联网连接解决方案

简介: 本文介绍了如何使用 WebSphere MQ Telemetry 提供的基于安全的 MQTT 连接,实现数据交互从传感器,检测设备,控制设备等域后台中心处理系统的物联网通用场景。通过 SSL 以及 JAAS,OAM 等机制的支撑达到物联网中边缘设备(传感器,RFID 读取器等)安全接入后台中心系统。 WebSphe...显示全部

简介: 本文介绍了如何使用 WebSphere MQ Telemetry 提供的基于安全的 MQTT 连接,实现数据交互从传感器,检测设备,控制设备等域后台中心处理系统的物联网通用场景。通过 SSL 以及 JAAS,OAM 等机制的支撑达到物联网中边缘设备(传感器,RFID 读取器等)安全接入后台中心系统。

WebSphere MQ Telemetry Transport (MQTT) 是一项消息传递技术,是 IBM 在分析了他们的客户在其业务中使用 WebSphere MQ 消息传递的情况(包括通过它传递数据)之后专门为物联网所定制的重要的轻量级消息传输协议。IBM 发现,数据经常是在企业外部的远程位置生成的,而且数据在从远程位置到达企业之前通常要经历一个复杂的过程。这时往往将数据人工输入计算机,然后只能通过 WebSphere MQ Enterprise 消息传递系统传输。而 MQTT 的开发将 WebSphere MQ 消息传递的应用范围延伸到这些远程位置。

WebSphere MQ 遥测传输 (MQTT) 是轻量级基于代理的发布 / 订阅的消息传输协议,设计思想是开放、简单、轻量、易于实现。这些特点使它适用于受限环境。例如,但不仅限于此:

网络代价昂贵,带宽低、不可靠。在嵌入设备中运行,处理器和内存资源有限。

该协议的特点有:

使用发布 / 订阅消息模式,提供一对多的消息发布,解除应用程序耦合。对负载内容屏蔽的消息传输。使用 TCP/IP 提供网络连接。有三种消息发布服务质量:“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。“至少一次”,确保消息到达,但消息重复可能会发生。“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。

WebSphere MQ Telemetry 简介

WebSphere MQ Telemetry 是 IBM 最新发布的,用来将 MQ 的传输能力扩展到边缘网络,提供边缘网络的传感器等设备的接入能力,使得物联网的构建连接基础,更为便捷,可靠,经济的一组功能组件包。它提供了物联网中不对等子网的连接解决方案,使得以前相对较低的,较复杂的,不可靠的异构网络平滑可靠经济的接入到较成熟的基于先进 SOA,ESB 架构的企业级高级网络成为可能。它使边缘网络的传感设备从较低的地位提高到和中心处理系统同级,使得两端网络得以对等,从而实现根本意义上的端(传感器)到端(后台中心处理系统)的集成。

WebSphere MQ Telemetry 中包括下列组件:

安装程序

可以使用 GUI 或者命令行安装程序来安装 WebSphere MQ Telmetry。SDK 的 Java 组件是作为 Eclipse 功能部件来安装的。SDK 的 C 语言组件是作为压缩文件提供的。

遥测通道

使用遥测通道来管理 MQTT 客户机与 WebSphere MQ 的连接。遥测通道使用新的 WebSphere MQ 对象(例如,SYSTEM.MQTT.TRANSMIT.QUEUE)与 WebSphere MQ 进行交互。

遥测服务

MQTT 客户机使用遥测服务(也称为 WebSphere MQ eXtended Reach (MQXR))连接至遥测通道。

WebSphere MQ Telemetry 的 WebSphere MQ 资源管理器支持

可以使用 WebSphere MQ 资源管理器来管理 WebSphere MQ Telemetry。未提供 MQSC 或 PCF 命令。

客户机软件开发工具箱(SDK)

客户机 SDK 具有以下四个部件:

用于 Java SE 和 Java ME 的 MQTT V3 客户机库。使用 Java 库为支持 Java SE 或 Java ME 的设备编写 Java 客户机。用于 C 语言的 MQTT V3 库。使用 C 库为许多平台编写 C 语言客户机。设备的 WebSphere MQ Telemetry 守护程序,这是一个使用 C 语言编写的高级客户机,它运行于许多平台上。MQTT V3 协议。已发布 MQTT V3 协议,并且可供复用。使用此协议并参考 MQTT 客户机实现为为不同的平台和语言编写 MQTT 客户机。文档

V7.0.1.3 以上的标准 WebSphere MQ 信息中心提供了 WebSphere MQ Telemetry 文档。还随 WebSphere MQ Telemetry 功能部件一起提供了此文档,并且提供了 WebSphere MQ 资源管理器的文档扩展。在此信息中心中以 Javadoc 和 HTML 文档形式提供了 Java 和 C 语言客户机的 SDK 文档。

WebSphere MQ Telemetry 提供的一部分小型客户机库,可以将这些客户机库嵌入到运行于许多不同的设备平台上的智能设备中。使用客户机构建的应用程序使用 MQ Telemetry Transport(MQTT)和 WebSphere MQ Telemetry 服务并借助 WebSphere MQ 来可靠地发布和预定消息。

WebSphere MQ Telemetry Transport(MQTT)旨在彻底改变使用 TCP/IP 建立的不可靠并且低带宽的连接。单个队列管理器可以用过使用 MQTT 将大量的设备连接至互联网。MQTT 是一种已发布的协议。已授权您在其他平台上使用其他语言来实现客户机。

一个高级 MQTT 客户机(即,设备中的 WebSphere MQ Telemetry 守护程序)运行于许多平台上。他可以充当一个网络集中器,能够将更多的 MQTT 客户机连接至单个队列管理器。对于在网络发生短暂中断期间无法缓存消息的小型设备,他还可以为这些小型设备提供存储转发功能。

WebSphere MQ Telemetry 将替代 WebSphere Message Broker V7 中已撤销的 SCADA 节点。Telemetry 应用程序使用 WebSphere Message Broker V7 来预定 MQTT 客户机共有的主题。他们使用 MQInput 节点接收来自 MQTT 客户机的发布,然后使用发布节点将它发布到 MQTT 客户机。



图 1. WebSphere MQ Telemetry 遥测服务



通过上述的整合集成架构图,可以了解 WebSphere MQ 通过 Telemetry 提供的遥测服务(MQXR),使得 WebSphere MQ 的通信能力大大扩展,不仅在企业内部提供了很好的消息传输服务,而且扩展到边缘网络的诸多设备,比如:边缘网关,嵌入式控制器,传感器以及执行器等等,使得他们的数据也能高效,可靠,便捷经济的相互传输,很好的解决了物联网中传感设备与后台中心系统之间的数据传输问题。

收起
参与4

查看其它 2 个回答一路向北的回答

应用场景

本文是通过介绍使用 WebSphere MQ Telemetry 以及其 SDK 组件中自带的 MQTT 基本客户机的 Java API 开发一个基于 SSL,JAAS 的通用安全连通解决方案应用场景来使读者对使用基于 MQTT 协议的 WebSphere MQ Telemetry 来构建物联网连通解决方案有进一步的理解,并能够自己动手开发相应的连通解决方案。

本场景介绍了如何开发一个基于安全连接的物联网解决方案。该方案通过 WebSphere MQ Telemetry 以及其 SDK 组件中自带的 MQTT 基本客户机的 Java API 来实现连通,在设计阶段通过开发基于 MQTT 基本客户机 Java API 的传感器端信息获取程序,然后通过 MQTT Java API 提供的连通能力,发布和订阅信息,同时,在前端域通过 WebSphere MQ Telemetry 的遥测服务监听客户端的连接,然后将消息通过 WebSphere MQ Telemetry 遥测通道发送到具体的消息订购者,最后通过系统预定义的订购将消息放入指定的队列中,供其他系统应用。图 3 简单的描述了整个应用场景的连通模型:



图 3. WebSphere MQ Telemetry 物联网连通模型

连通方案开发步骤及流程

本文实现安全的连通会使用到 WebSphere MQ Telemetry 的 SSL 和 JAAS 支持功能,并且在 MQTT 基本客户机 Java API 中都有实现,以下会分别从 JAAS 的客户端、服务器端开发配置和 SSL 的客户端、服务器端开发和配置介绍。

Note:开发工具使用 Eclipse,WebSphere MQ Explorer。

JAAS 开发配置 - 服务器

在服务器端,需要开发相应的 JAAS 的 Login 类,然后配置 WebSphere MQ Telemetry 的 JAAS 相关属性,然后新建或者修改遥测通道,增加相应的 JAAS 设置。

在 Eclipse 中新建 JAVA 工程,在工程中新建类 LoginModule 实现接口 javax.security.auth.spi.LoginModule 和类 Principal 实现接口 java.security.Principal ,java.io.Serializable。这些类在 WebSphere MQ Telemetry 的 SDK 中也有参考实现 sample,可以直接导入然后修改。路径为:WMQ Installation\mqxr\samples\ JAASLoginModule.java JAASPrincipal.java。修改为自己的文件名。


图 4. JAAS Login 模块工程


本文直接导入 WebSphere MQ Telemetry 的 SDK 的 sample,然后修改 LoginModule 中的 Login 方法。

将原有 Login 方法中认证代码段:

public Boolean login()  {         … // Accept everything.  if (true) {  loggedIn = true;  } else  throw new javax.security.auth.login.FailedLoginException("Login failed"); … }  

修改为自己的认证逻辑:

public Boolean login()  {         … // Accept everything.    if(username != null && username.equalsIgnoreCase("XR"))     loggedIn = true      else           throw        new javax.security.auth.login.FailedLoginException("Login failed"); … }

这里只是简单的设置如果用户名是“XR”,则鉴权成功。

注意 : 注意 Eclipse 使用的 JRE 编译环境需与 WebSphere MQ Telemetry 的 JRE 兼容。

修改 WebSphere MQ Telemetry 的 JAAS 设置。找到服务器端的 JAAS 配置文件:WMQ Installation\qmgrs\qMgrName\mqxr\jaas.config,修改或者添加自己的认证模块。本文中添加了新的认证模块实现。
XRConfig {   samples.XRLoginModule required debug=true;  };   MQXRConfig {   samples.JAASLoginModule required debug=true;   //com.ibm.security.auth.module.NTLoginModule required;   //com.ibm.security.auth.module.Krb5LoginModule required   //                 principal=principal@your_realm   //                 useDefaultCcache=TRUE   //                 renewTGT=true;   //com.sun.security.auth.module.NTLoginModule required;   //com.sun.security.auth.module.UnixLoginModule required;   //com.sun.security.auth.module.Krb5LoginModule required   //                 useTicketCache="true"  //                 ticketCache="${user.home}${/}tickets";  };

指定认证模块的类名 samples.XRLoginModule。

编辑 services.env 文件设定 JAAS 认证模块类的路径。

生成新的 services.env 或者在原文件中添加内容如下:

CLASSPATH=C:\Program Files\IBM\WebSphere MQ\mqxr\samples;

这个地址是第 2 步中生成的 class 文件的路径。然后将第 2 步中生成的 class 文件连同 package 放入上述文件中的 classpath。

也可以修改系统的 CLASSPATH,将认证模块的路径添加到系统的 classpath 中。

注意:service.env 文件缺省位置 WMQ installation\service.env,使用每个队列管理器的 service.env 文件也可以覆盖这些设置 :WMQ Installation\Qmgrs\qMgrName\service.env,Service.env 中不能包含任何变量。

使用 WebSphere MQ Explorer 建立基于 JAAS 的遥测通道。在 JAAS 配置文件中,输入第 3 步中添加的认证模块名称。


图 5. 配置 JAAS 模块名称

2012-03-07
浏览909

回答者

一路向北 最近回答过的问题

回答状态

  • 发布时间:2012-03-07
  • 关注会员:1 人
  • 回答浏览:909
  • X社区推广