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

简介: 本文介绍了如何使用 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

3同行回答

JAAS 开发配置 - 客户端到此,WebSphere MQ Telemetry 服务器端的 JAAS 配置已经完成了,然后是客户端编程。客户端编程只需要在建立连接使用的连接属性中,添加相应的用户名和密码即可。例如: client = new MqttClient(mqttURI, clientid);         &...显示全部

JAAS 开发配置 - 客户端

到此,WebSphere MQ Telemetry 服务器端的 JAAS 配置已经完成了,然后是客户端编程。客户端编程只需要在建立连接使用的连接属性中,添加相应的用户名和密码即可。例如:

client = new MqttClient(mqttURI, clientid);          client.setCallback(this);          MqttConnectOptions connectOptions = new MqttConnectOptions();  connectOptions.setUserName("XR");                                  connectOptions.setPassword(("Very Good").toCharArray());          connectOptions.setCleanSession(true);          MqttTopic iotopic = client.getTopic("Dead");          connectOptions.setWill(iotopic, IODead.getBytes(), 2, true);          client.connect(connectOptions);          client.subscribe(MQTT_TRACKSIDE_TOPIC, 2);          System.out.println("Connected and subscribed to "+mqttURI);

SSL 开发配置 - 服务器

接下来介绍 WebSphere MQ Telemetry 的 SSL 支持功能,通过认证证书来实现两端的互认证。客户机可使用以下三种方式之一来信任服务器证书:

使用 cacerts 库中由众所周知的认证中心签名的服务器证书其他证书:客户信任的证书存储在客户机的信任库中。并在 MqttConnectionOptions.SSLPropetry 中设置信任库参数。(com.ibm.ssl.trustStore,com.ibm.ssl.trustStorePassword)。使用定制信任管理器:实现信任提供程序,并为它传递所使用算法的名称。并在 MqttConnectionOptions.SSLPropetry 中设置信任库参数。( com.ibm.ssl.trustStoreProvider,com.ibm.ssl.trustStoreManager)。

本文以自签名证书的遥测通道和客户端认证为切入点,分别从 SSL 的客户端、服务器端开发配置来介绍。服务器的客户机认证和 MQTT 客户机的服务器认证都是可选的。服务器端开发也分为两大类,首先是生成两端的认证文件,然后就是配置遥测通道使用我们生成的认证文件。

注意:开发工具使用 iKeyTool,WebSphere MQ Explorer。

打开 IBM key 管理工具。


图 6. Key 管理软件


为客户机生成密钥,以对遥测通道进行认证。

首先,生成新的 Server 密钥库,并为遥测通道生成一个自我签名的密钥对:

类型选择为 JKS,库名称:SSLBothkey.jks



图 7. 生成 server 密钥库:SSLBothkey.jks




输入库的密码:mqtt(用来查看和修改库),然后生成一个自签名的密钥对:



图 8. 生成自签名的密钥对


将 Server 的公用证书作为 ASCII 文件导出:SSLBoth.arm。


图 9. 导出 Sever 的公用证书


生成客户机信任库,并导入 Server 的公用证书。

输入客户机信任库名称 SSLBothClientTrust.jks 密码:mqtt;切换到签名证书内容,添加 server 公用证书。



图 10. 生成自签名的密钥对




添加 Server 公用证书。



图 11. 添加 Server 公用证书






图 12. 证书标签:SSServerPublic


为遥测通道生成密钥,以对客户机进行认证,生成新的客户机密钥库,并为客户机生成一个自签名的密钥对。

类型:JKS,库名称:SSBothClientkey.jks



图 13. 客户机密钥库:SSBothClientkey.jks




输入密钥库密码: mqtt (用来查看,和修改库),然后生成一个自签名的密钥对。



图 14. 生成自签名密钥对


将公用证书作为 ASCII 文件导出。


图 15. 导出客户端公用证书 SSLBothClient.arm


将客户机的公用证书导入到服务器密钥库中 SSLBothkey.jks,打开服务器密钥密钥库 SSLBothkey.jks,输入密钥库密码:mqtt;切换到签名证书内容,添加客户机公用证书。


图 16. 导入客户端公用证书 SSLBothClient.arm






图 17. 查看导入的客户机公用证书:SSClientPublic


通过上面的步骤,生成了两端的认证证书,接下来需要通过配置服务器端的遥测通道来配置相应的 SSL 设置。

com.ibm.mq.MQXR.channel/SSLBoth: \  com.ibm.mq.MQXR.Port=8891;\  com.ibm.mq.MQXR.Backlog=4096;\  com.ibm.mq.MQXR.KeyFileName=C:\Certificates\SSServerOptKey.jks;\  com.ibm.mq.MQXR.PassPhrase=password;\  com.ibm.mq.MQXR.ClientAuth=REQUIRED;\  com.ibm.mq.MQXR.UserName=Guest;\  com.ibm.mq.MQXR.StartWithMQXRService=true


图 18. 在 WebSphere MQ Telemetry 上新建遥测通道



设置遥测通道名称:SSLBoth,端口号:8891


图 19. SSL 遥测通道设置 - 通道



SSL 密钥库:Certification Location\SSLServerkey.jks

密钥库密码:mqtt


图 20. SSL 遥测通道设置 - 密钥库



JAAS 设置参见 JAAS 开发配置服务器端。

设置 MQTT 的 OAM 客户机授权属性,这里采用固定用户 ID:Guest



图 21. 用户 ID




图 22. 遥测通道配置信息



更多内容请参见:http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1203_xiangr_mqtt/1203_xiangr_mqtt.html收起
2012-03-07
浏览842
应用场景本文是通过介绍使用 WebSphere MQ Telemetry 以及其 SDK 组件中自带的 MQTT 基本客户机的 Java API 开发一个基于 SSL,JAAS 的通用安全连通解决方案应用场景来使读者对使用基于 MQTT 协议的 WebSphere MQ Telemetry 来构建物联网连通解决方案有进一步的理解,并能够...显示全部

应用场景

本文是通过介绍使用 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
浏览907
基于 MQTT 的物联网连通解决方案WebSphere MQ Telemetry Transport 是 IBM 在分析了他们的客户在其业务中使用 WebSphere MQ 消息传递的情况(包括通过它传递数据)之后专门为物联网所定制的重要的轻量级消息传输协议。而且这种定制,是基于 IBM 对现有的物联网连通解决方案进...显示全部

基于 MQTT 的物联网连通解决方案

WebSphere MQ Telemetry Transport 是 IBM 在分析了他们的客户在其业务中使用 WebSphere MQ 消息传递的情况(包括通过它传递数据)之后专门为物联网所定制的重要的轻量级消息传输协议。而且这种定制,是基于 IBM 对现有的物联网连通解决方案进行了大量的分析,对其中存在的问题和缺陷做了很好的解决。这些问题集中体现在如下方面:

在网络服务质量方面

现有网络带宽参差不齐

网络稳定性和可靠性低

在终端设备方面

对终端采集和控制设备计算和存储能力要求高

对遗留终端的改造和维护成本高

在数据方面

实时数据监控效果差

大数量终端下,数据处理的能力低下

IBM 针对上面业界方案中的普遍难题,结合 MQTT,提出了更智慧的物联网连通解决方案。


图 2. IBM 物联网联通解决方案



方案中将系统分为四个区域,最右边是企业较成熟的稳定网络下的中心系统域,中间是用来两边交互的前端域,最右边是物联网中大量存在的低质量的边缘域和传感器域。由于传感器域和边缘域与中心系统域之间的网络异构,不对等,暴露出很多我们上面提到的问题。基于这样的网络环境,我们在传感器域嵌入 MQTT 的基本客户机,借助 MQTT 协议自身的优势,实现数据在传感器域与中心系统域之间的平滑交互,并且 WebSphere MQ Telemetry 还提供了更为强大的 Advanced MQTT 客户机(即,WebSphere MQ Telemetry daemon 守护程序),在某些特殊的环境中,比如:有些客户的传感器不支持或者不允许第三方软件嵌入),在网络边缘域构建高级客户机,通过守护程序连接一定数量的传感器实现数据在传感器域,边缘域和中心系统域之间的交互。同时,这种守护程序还能提供很多功能,比如实现消息在两边域之间的缓存过滤,中断自动恢复等等。

分析方案的特点,会发现对于业界物联网联通解决方案中存在的普遍问题,方案能够很好的解决和优化。

对终端系统计算和存储能力要求低

能在 8bit 位处理器上很好的运行

C 的 client 只有 30KB,Java 的 client 只需要 100KB

很好的适应各种复杂网络,特别是受限网络

预期并适应频繁的网络中断

能应对低速、低质量的网络

使按数据流量收费的网络成本最小化

协议被压缩至按比特记的消息头以及可变长度域

最小的消息包大小可为 2 字节

将消息 (“推送”) 传送至应用程序 ( 无需轮询 )

发布 - 订阅的消息通信协议,允许一条消息只发布一次,便可被多个消费端(应用程序 / 设备)所接收

实现系统间松耦合,方便扩展,整合

提供灵活便捷的系统整合能力

使用 MQ,MB 提供可靠系统内系统整合和通信

Cast Iron 强大的系统间整合带来巨大的灵活性

提供丰富的安全性

使用 SSL 提供的认证和加密来保证传输安全性

通过 JAAS 接口提供的身份认证

OAM 用于资源层面的授权

强大的性能提高系统的高可靠性

高连接数下系统低计算资源使用

高连接数下系统高信息处理速度

提供多种消息服务质量

0 :消息最多被传递一次

1 :消息会被传递但可能会重复传递

2 :消息保证传递且仅有一次传递

收起
2012-03-07
浏览844

提问者

问题状态

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