设备接入 IoTDA设备接入 IoTDA

计算
弹性云服务器 ECS
裸金属服务器 BMS
云手机 CPH
专属主机 DeH
弹性伸缩 AS
镜像服务 IMS
函数工作流 FunctionGraph
云耀云服务器 HECS
VR云渲游平台 CVR
特惠算力专区
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
弹性文件服务 SFS
存储容灾服务 SDRS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
专属企业存储服务
云存储网关 CSG
专属分布式存储服务 DSS
CDN与智能边缘
内容分发网络 CDN
智能边缘云 IEC
智能边缘小站 IES
智能边缘平台 IEF
人工智能
AI开发平台ModelArts
华为HiLens
图引擎服务 GES
图像识别 Image
文字识别 OCR
自然语言处理 NLP
内容审核 Moderation
图像搜索 ImageSearch
医疗智能体 EIHealth
园区智能体 CampusGo
企业级AI应用开发专业套件 ModelArts Pro
人脸识别服务 FRS
对话机器人服务 CBS
视频分析服务 VAS
语音交互服务 SIS
知识图谱 KG
人证核身服务 IVS
IoT物联网
设备接入 IoTDA
设备管理 IoTDM(联通用户专用)
全球SIM联接 GSL
IoT数据分析 IoTA
路网数字化服务 DRIS
IoT边缘 IoTEdge
设备发放 IoTDP
IoT行业生态工作台
开发与运维
软件开发平台 DevCloud
项目管理 ProjectMan
代码托管 CodeHub
流水线 CloudPipeline
代码检查 CodeCheck
编译构建 CloudBuild
部署 CloudDeploy
云测 CloudTest
发布 CloudRelease
移动应用测试 MobileAPPTest
CloudIDE
Classroom
开源镜像站 Mirrors
应用魔方 AppCube
云性能测试服务 CPTS
应用管理与运维平台 ServiceStage
云应用引擎 CAE
视频
实时音视频 SparkRTC
视频直播 Live
视频点播 VOD
媒体处理 MPC
视频接入服务 VIS
管理与监管
统一身份认证服务 IAM
消息通知服务 SMN
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云日志服务 LTS
云审计服务 CTS
标签管理服务 TMS
资源管理服务 RMS
应用身份管理服务 OneAccess
区块链
区块链服务 BCS
可信跨链服务 TCS
可信分布式身份服务
智能协作
IdeaHub
开发者工具
SDK开发指南
API签名指南
DevStar
HCloud CLI
Terraform
Ansible
云生态
云市场
合作伙伴中心
华为云培训中心
其他
管理控制台
消息中心
产品价格详情
系统权限
我的凭证
客户关联华为云合作伙伴须知
公共问题
宽限期保留期
奖励推广计划
活动
容器
云容器引擎 CCE
云容器实例 CCI
容器镜像服务 SWR
应用编排服务 AOS
多云容器平台 MCP
基因容器 GCS
容器洞察引擎 CIE
云原生服务中心 OSC
容器批量计算 BCE
容器交付流水线 ContainerOps
应用服务网格 ASM
网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
数据库
云数据库 RDS
数据复制服务 DRS
文档数据库服务 DDS
分布式数据库中间件 DDM
云数据库 GaussDB (for openGauss)
云数据库 GaussDB(for MySQL)
云数据库 GaussDB NoSQL
数据管理服务 DAS
数据库和应用迁移 UGO
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
可信智能计算服务 TICS
推荐系统 RES
云搜索服务 CSS
数据可视化 DLV
数据湖治理中心 DGC
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
应用中间件
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
API网关 APIG
分布式缓存服务 DCS
分布式消息服务RocketMQ版
企业应用
域名注册服务 Domains
云解析服务 DNS
云速建站 CloudSite
网站备案
商标注册
华为云WeLink
会议
隐私保护通话 PrivateNumber
语音通话 VoiceCall
消息&短信 MSGSMS
云管理网络
SD-WAN 云服务
边缘数据中心管理 EDCM
云桌面 Workspace
应用与数据集成平台 ROMA Connect
ROMA资产中心 ROMAExchange
API全生命周期管理 ROMA API
安全与合规
安全技术与应用
DDoS防护 ADS
Web应用防火墙 WAF
云防火墙 CFW
应用信任中心 ATC
企业主机安全 HSS
容器安全服务 CGS
云堡垒机 CBH
数据库安全服务 DBSS
数据加密服务 DEW
数据安全中心 DSC
云证书管理服务 CCM
SSL证书管理 SCM
漏洞扫描服务 VSS
态势感知 SA
威胁检测服务 MTD
管理检测与响应 MDR
安全治理云图 Compass
认证测试中心 CTC
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
专属云
专属计算集群 DCC
解决方案
高性能计算 HPC
SAP
混合云灾备
华为工业云平台 IMC
价格
成本优化最佳实践
专属云商业逻辑
用户服务
帐号中心
费用中心
成本中心
资源中心
企业管理
工单管理
客户运营能力
国际站常见问题
支持计划
专业服务
合作伙伴支持计划
文档首页> 设备接入 IoTDA> 最佳实践> 设备接入> 基于MQTT.fx的X.509证书接入指导
更新时间:2021-12-28 GMT+08:00
分享

基于MQTT.fx的X.509证书接入指导

本文档以MQTT.fx为例,介绍以MQTT原生协议接入物联网平台。MQTT.fx是目前主流的MQTT客户端,可以快速验证是否可以与物联网平台服务交互发布或订阅消息。

X.509是一种用于通信实体鉴别的数字证书,物联网平台支持设备使用自己的X.509证书进行认证鉴权。使用X.509认证技术时,设备无法被仿冒,避免了密钥被泄露的风险。

前提条件

  • 已注册华为云官方帐号。未注册可单击注册页面完成注册。
  • 已完成实名制认证。未完成可在华为云上单击实名认证完成认证,否则无法使用设备接入功能。
  • 已开通设备接入服务。未开通则访问设备接入服务,单击“管理控制台”后开通该服务。

限制说明

  • 当前只有通过MQTT接入的设备支持使用X.509证书进行设备身份认证。
  • 每个用户最多上传100个设备CA证书。

获取设备接入信息

在设备接入服务控制台获取设备接入平台所需的信息。

  1. 访问设备接入服务,单击“管理控制台”进入设备接入控制台。
  2. 单击“管理控制台”进入控制台,单击左侧导航栏的“总览”,查看设备接入信息,记录域名和端口。

    图1 进入平台接入地址
    图2 获取接入地址链接

    针对不支持用域名接入的设备,通过在cmd命令框中执行“ping 域名”获取IP地址,用IP地址接入平台。由于IP地址不固定,您需要将IP地址做成可配置项。

创建产品

  1. 登录管理控制台,单击左侧导航栏“产品”,单击页面右上角的“创建产品”
  2. 根据页面提示填写参数,然后单击“确认”

    基本信息

    所属资源空间

    平台自动将新创建的产品归属在默认资源空间下。如需归属在其他资源空间下,下拉选择所属的资源空间。如无对应的资源空间,请先创建资源空间

    产品名称

    自定义。支持字母、数字、下划线(_)、连字符(-)的字符组合。

    协议类型

    选择MQTT。

    数据格式

    选择JSON。

    厂商名称

    自定义。支持中英文字符、数字、下划线(_)、连字符(-)的字符组合。

    所属行业

    请根据实际情况填写。若使用平台预置的产品模型,请根据产品模型所属的行业填写。没有填无。

    设备类型

    请根据实际情况填写。若使用平台预置的产品模型,会自动关联设备类型,不需要再输入设备类型。

    高级配置

    产品ID

    定制ProductID,用于唯一标识一个产品。如果携带此参数,平台将产品ID设置为该参数值;如果不携带此参数,产品ID在物联网平台创建产品后由平台分配获得。

    产品描述

    产品描述。请根据实际情况填写。

    图3 创建产品

开发产品模型

  1. 找到新增的产品,单击“产品”进入产品界面。
  2. 在产品详情“模型定义”页面,单击“自定义模型”,配置产品的服务。
  3. 新增服务类型“Connectivity”

    1. “模型定义”页面,填写“服务ID”“服务类型”“服务描述”,单击“确定”
      • “服务ID”:Connectivity
      • “服务类型”:建议和服务ID保持一致
      • “服务描述”:Connectivity
        图4 添加服务
    2. “Connectivity”的下拉菜单下单击“添加属性”,填写相关信息后,单击“确定”
      • “属性名称”:dailyActivityTime
      • “数据类型”:int(整型)
      • “访问权限”:可读
      • “取值范围”:0~65535
      • “步长”:1
      • “单位”:5
        图5 添加属性

  4. 新增服务类型“Battery”

    1. “模型定义”下单击“添加服务”,填写“服务ID”“服务类型”“服务描述”,单击“确定”
      • “服务ID”:Battery
      • “服务类型”:建议和服务ID保持一致
      • “服务描述”:Battery
        图6 添加服务
    2. 在““Battery””的下拉菜单下单击“添加属性”,填写相关信息后,单击“确定”
      • “属性名称”:batteryLevel
      • “数据类型”:int(整型)
      • “访问权限”:可读
      • “取值范围”:0-100
      • “步长”:1
      • “单位”:%
        图7 添加属性

上传设备CA证书

  1. 在左侧导航栏选择设备 > 设备CA证书,单击右上角的“上传证书”
  2. 在弹出的对话框中,单击“添加文件”,然后单击“确认”

    图8 上传证书

    设备CA证书由设备厂商提供,调测时可自行制作调测证书,商用时建议更换为商用证书,否则会带来安全风险。

制作设备CA调测证书

本文以Windows环境为例,介绍通过Openssl工具制作调测证书的方法,生成的证书为PEM编码格式的证书。

  1. 在浏览器中访问这里,下载并进行安装OpenSSL工具。
  2. 以管理员身份运行cmd命令行窗口。
  3. 执行cd c:\openssl\bin(请替换为openssl实际安装路径),进入openssl命令视图。
  4. 执行以下命令生成密钥对。
    openssl genrsa -out rootCA.key 2048
  5. 执行以下命令,使用密钥对中的私有密钥生成 CA 证书。
    openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

    系统提示您输入如下信息,所有参数可以自定义。

    • Country Name (2 letter code) [AU]:国家,如CN。

    • State or Province Name (full name) []: 省份,如GD。

    • Locality Name (for example, city) []:城市,如SZ。

    • Organization Name (for example, company) []:组织,如Huawei。

    • Organizational Unit Name (for example, section) []:组织单位,如IoT。

    • Common Name (e.g. server FQDN or YOUR name) []: 名称,如zhangsan。

    • Email Address []:邮箱地址,如1234567@163.com。

    在openssl安装目录的bin文件夹下,获取生成的CA证书(rootCA.pem)。

上传验证证书

如果上传的是调测证书,上传后证书状态显示为“未验证”,您需要上传验证证书,来证明您拥有该CA证书。

图9 设备CA证书

验证证书是由设备CA证书对应的私钥创建的,请参考如下操作制作验证证书。

  1. 获取验证证书的验证码

    图10 选择上传验证证书
    图11 获取验证码

  2. 执行如下命令为私有密钥验证证书生成密钥对。

    openssl genrsa -out verificationCert.key 2048

  3. 执行如下命令为私有密钥验证证书创建CSR(Certificate Signing Request)。

    openssl req -new -key verificationCert.key -out verificationCert.csr

    系统提示您输入如下信息,Common Name填写为验证证书的验证码,其他参数自定义。

    • Country Name (2 letter code) [AU]:国家,如CN。

    • State or Province Name (full name) []: 省份,如GD。

    • Locality Name (for example, city) []:城市,如SZ。

    • Organization Name (for example, company) []:组织,如Huawei。

    • Organizational Unit Name (for example, section) []:组织单位,如IoT。

    • Common Name (e.g. server FQDN or YOUR name) []:验证证书的验证码,请参考步骤1获取 。

    • Email Address []:邮箱地址,如1234567@163.com。

    • Password[]:密码,如1234321。
    • Optional Company Name[]:公司名称,如Huawei。

  4. 执行以下命令使用CSR创建私有密钥验证证书。

    openssl x509 -req -in verificationCert.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out verificationCert.pem -days 500 -sha256

    在openssl安装目录的bin文件夹下,获取生成的验证证书(verificationCert.pem)。

  5. 选择对应证书,单击然后单击“上传验证证书”

    图12 上传验证证书

  6. 在弹出的对话框中,单击“添加文件”,然后单击“确认”。

    图13 完成验证

    上传验证证书后,证书状态变为“已验证”,表明您拥有该CA证书。

预置X.509证书

在注册X.509设备之前,您需要在设备侧预置CA机构签发的X.509证书。

X.509证书由CA机构签发,若没有CA机构签发的商用证书,您可以自己制作设备CA调测证书

制作X.509调测证书

  1. 以管理员身份运行cmd命令行窗口,执行cd c:\openssl\bin(请替换为openssl实际安装路径),进入openssl命令视图。
  2. 执行如下命令生成密钥对。
    openssl genrsa -out deviceCert.key 2048
  3. 执行如下命令为设备证书创建CSR(Certificate Signing Request)。
    openssl req -new -key deviceCert.key -out deviceCert.csr

    系统提示您输入如下信息,所有参数可以自定义。

    • Country Name (2 letter code) [AU]:国家,如CN。

    • State or Province Name (full name) []: 省份,如GD。

    • Locality Name (for example, city) []:城市,如SZ。

    • Organization Name (for example, company) []:组织,如Huawei。

    • Organizational Unit Name (for example, section) []:组织单位,如IoT。

    • Common Name (e.g. server FQDN or YOUR name) []: 名称,如zhangsan。

    • Email Address []:邮箱地址,如1234567@163.com。

    • Password[]:密码,如1234321。
    • Optional Company Name[]:公司名称,如Huawei。
  4. 执行以下命令使用CSR创建设备证书。
    openssl x509 -req -in deviceCert.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out deviceCert.pem -days 500 -sha256

    在openssl安装目录的bin文件夹下,获取生成的设备证书(deviceCert.pem)。

注册X.509证书认证的设备

  1. 访问设备接入服务,单击“管理控制台”进入设备接入控制台。
  2. 在左侧导航栏选择 设备 > 所有设备,单击右上角“注册设备”,按照如下表格填写参数后,单击“确定”

    图14 单设备注册

    参数名称

    说明

    所属资源空间

    选择设备所属的资源空间。

    所属产品

    选择设备所属的产品。

    如没有,请先创建产品

    设备标识码

    即node_id,填写为设备的IMEI、MAC地址或Serial No;若没有真实设备,填写自定义字符串,由英文字母和数字组成

    设备名称

    即device_name,可自定义。

    设备认证类型

    X.509证书:设备使用X.509证书验证身份。

    指纹

    “设备认证类型”选择“X.509证书”时填写,导入设备侧预置的设备证书对应的指纹,在OpenSSL执行openssl x509 -fingerprint -sha256 -in deviceCert.pem命令可查询。注:填写时需要删除冒号

连接鉴权

参考连接鉴权接口文档,使用MQTT.fx工具激活在物联网平台上注册的设备。

  1. 访问MQTT.fx下载页面,下载并安装最新版本的MQTT.fx工具。

    MQTT.fx 1.7.0及旧版本对带有$的主题(Topic)处理存在问题,请使用最新版本进行测试。

  2. 访问这里,填写注册设备后生成的设备ID(DeviceId)和密钥(DeviceSecret),生成连接信息(ClientId、Username、Password)。

    DeviceSecret在此场景下可随意填写,如12345678。

    图15 获取ClientId

    参数

    必选/可选

    类型

    参数描述

    ClientId

    必选

    String(256)

    一机一密的设备clientId由4个部分组成:设备ID、设备身份标识类型、密码签名类型、时间戳,通过下划线“_”分隔。

    • 设备ID:指设备在平台成功注册后生成的唯一设备标识,通常由设备的产品ID和设备的NodeId通过分隔符“_”拼装而来。
    • 设备身份标识类型:固定值为0,表示设备ID。
    • 密码签名类型:长度1字节,当前支持2种类型:
      • “0”代表HMACSHA256不校验时间戳。
      • “1”代表HMACSHA256校验时间戳。
    • 时间戳:为设备连接平台时的UTC时间,格式为YYYYMMDDHH,如UTC 时间2018/7/24 17:56:20 则应表示为2018072417。

    Username

    必选

    String(256)

    设备ID。

    设备通过MQTT协议的connect消息进行鉴权,对于构造clientId的各个部分信息都必须包括进去,平台收到connect消息时,会判断设备的鉴权类型和密码摘要算法。

    使用生成工具生成的clientId格式,默认不校验时间戳:设备ID_0_0_时间戳。

    • 当采用“HMACSHA256”校验时间戳方式时,会先校验消息时间戳与平台时间是否一致,再判断密码是否正确。
    • 当采用“HMACSHA256”不校验时间戳方式时,鉴权消息也必须带时间戳,但不检验时间是否准确,仅判断密码是否正确。

    connect消息鉴权失败时,平台会返回错误,并自动断开MQTT链路。

  3. 打开MQTT.fx软件,单击“设置”图标。

  4. 填写“ Connection Profile” 相关信息。

    图16 “General ”可以使用工具默认信息

    参数名称

    说明

    Broker Address

    填写从设备接入服务控制台获取的设备对接地址,此地址为域名信息。不能通过域名接入的设备,填写IP地址,详细请参考2中获取的。

    Broker Port

    为8883。

    Cliend ID

    设备cliendID,请参考2中获取。

  5. 单击“User Credentials”填写“User Name”

    图17 填写设备ID

    参数名称

    说明

    User Name

    即设备ID,请参考2中获取。

    Password

    使用X.509证书认证时不需要填写。

  6. 单击“SSL/TLS”配置鉴权参数,然后单击““Apply””。选择开启 “SSL/TLS”,勾选“ Self signed certificates”,配置相关证书内容。

    图18 填写“SSL/TLS”相关参数

    CA File为对应的CA证书。下载并获取证书(加载pem格式的证书)。

    Client Certificate File为设备的设备证书(deviceCert.pem)。

    Client Key File为设备的私钥(deviceCert.key)。

  7. 单击“Connect”,设备鉴权成功后,在物联网平台可以看到设备处于在线状态。

    图19 设备状态

上报数据

参考设备属性上报接口文档,使用MQTT.fx工具向物联网平台上报数据。

设备若通过MQTT通道上报数据,需要发给指定的topic,上报消息的topic格式为:“$oc/devices/{device_id}/sys/properties/report”,其中“device_id”的值,为设备注册成功后返回的“device_id”值。

  1. 填写接口地址,此处以“$oc/devices/{device_id}/sys/properties/report”为例,如“$oc/devices/5e4e2e92ac-164aefa8fouquan1/sys/properties/report”

    图20 填写接口地址

  2. 填写上报的数据。

    请求参数

    字段名

    必选/可选

    类型

    参数描述

    services

    必选

    List<ServiceProperty>

    设备服务数据列表(具体结构参考下表ServiceProperty定义表)

    ServiceProperty定义表:

    字段名

    必选/可选

    类型

    参数描述

    service_id

    必选

    String

    设备服务的ID。

    properties

    必选

    Object

    设备服务的属性列表,具体字段在设备关联的产品模型中定义。

    event_time

    可选

    String

    设备采集数据UTC时间(格式:yyyyMMddTHHmmssZ),如:20161219T114920Z。

    设备上报数据不带该参数或参数格式错误时,则数据上报时间以平台时间为准。

    请求示例

    {
        "services": [{
                "service_id": "Connectivity",
                "properties": {
                    "dailyActivityTime": 57
                },
                "event_time": "20151212T121212Z"
            },
            {
                "service_id": "Battery",
                "properties": {
                    "batteryLevel": 80
                },
                "event_time": "20151212T121212Z"
            }
        ]
    }
    图21 请求示例

  3. 单击“Publish”,可以在物联网平台上查看设备是否成功上报数据。

    图22 上报数据

分享:

    相关文档

    相关产品

关闭导读