mBed Pelion学习笔记(一)Welcome & Introduction

一、 简介

  • Pelion Device Management 是一个与交互和管理连接设备等相关的服务。它包括以下功能:
    ①安全连接:通过它可以进行交互管理和IoT设备管理
    ②端对端远程固件更新 解决方案
    ③有清晰的工作流程和配置机制,能够简化我们的开发过程,能够让我们无缝过渡到部署(实际运用)。
    ④有着灵活的配置机制。能够和任何出厂设置一起使用,为你的设备提供所需的信息去连接到 Device Management 。
    ⑤使用各种接口进行Web应用程序开发:REST APIs,软件开发工具包(SDKs)和在线编译。
    ⑥设备上使用定制的、可在多种操作系统下运行的客户端,用以支持Device Management 的服务。

 

二、 Pelion Device Management

  • 为了提供一个端对端的解决方案,Pelion包括两个部分:云端服务、设备客户端。云端服务即Pelion Device Management 服务。
  • 设备客户端由三个部分组成:
    ①Device Management Connect 客户端:提供链接到Device Management 服务器。
    ②Device Management Update 客户端:接受和管理固件更新的安装。
    ③Device Management Provision 客户端:保存配置信息,信息包括:设备证书、服务端URIs、其他参数(设备连接到你的账户所需的)
  • 使用设备管理客户端可以做到:
    ①创建一个唯一的设备ID,在设备管理服务器上注册或者注销设备,设备证书。
    ②基于标准的TSL/DTLS 的安全连接。
    ③在设备管理服务器上管理设备。
    ④从服务端控制设备和应用程序逻辑。
    ⑤通过服务端的控制,用Device Management Update 无线更新设备。
    ⑥使用统一移植层(PAL)将设备移植到不同的平台。

 

三、 Device Management Connect

  • Device Management Connect 提供IoT设备 和 企业软件或Web应用间的安全连接,该安全连接是通过把两者都连接到设备管理服务器、并且让两者有权限互联来实现的。
    一般用的都是业界的通信标准,例如:用LwM2M 协议来做设备管理,用CoAP 来实现设备和设备管理服务器之间的通信。
  • Device Management Connect 提供:
    ①两种客户端:
        a. Device Management Client
        b. Device Management Client Lite:轻量级设备管​​理客户端,使用预共享密钥。
    ②设备管理用LwM2M
    ③通信用CoAP
    ④Web应用和设备管理服务器的连接
    ⑤端对端通道安全:
        a. 设备和服务器之间的连接用的是DTLS/TLS。
        b. Web应用程序和Device Management REST API 之间的连接用的是HTTPS。
    ⑥物联网设备的优化。
  • LwM2M:Lightweight Machine to Machine。Device Management Connect实现了LwM2M 标准,该标准提供了一致的设备管理,可以无视设备硬件和设备上跑的应用的差异。
  • LwM2M包括了以下接口:
    ①引导程序接口:引导设备和Device Management 之间的安全连接。
    ②客户端注册接口:让设备注册到Device Management 。并且显示设备资源,以便Web应用使用。
    ③设备管理和服务支持接口:让应用可以操作设备资源。基于LwM2M Resource model,该接口可以读、写、操作设备。
    ④信息报告接口:让应用可以观察客户端上的资源变化,当有值变化或者满足一定条件时,接收到提醒。
  • CoAP:The Constrained Application Protocol。CoAP协议是一种低开销协议,专为受限设备(有限性能MCU的设备)和低功耗IP网络而设计。 它通常只使用UDP,但Device Management Client 已添加TCP支持。它还支持TLS / DTLS协议,以提供传输安全性和设备身份验证。
  • Device Management Edge:提供IoT 网关支持,当物联网设备无法独立连接时(通常是因为它们使用非IP协议),Device Management Edge提供协议转换。

 

四、 Device Management Update

  • 为实现更新,需要一个设备管理更新客户端运行在设备上,一个设备管理更新服务器来推送更新。
  • 典型更新的工作流程:
    ①先要构建一个新的固件镜像,并把它上传到设备管理服务器。镜像中要包括设备管理更新客户端(这次更新成功后下次还能再远程更新)。
    ②创建并上传清单文件(manifest file)。作用是描述这次更新,并且允许设备选择是否更新。可以使用清单工具创建满足所有设备管理要求的清单。
    ③固件镜像和清单准备好之后,可以合并它们进行一次或多次更新操作,可以针对一些特定设备或一组设备。
  • 设备上的Device Management Update客户端,负责分析、安装固件,报告更新进程。
  • 固件镜像应该有更新客户端和你的应用内容,这样以后才能再次更新。但固件镜像不应该包括BootLoader,因为它是不可更新的。
  • 可以通过以下方式将固件上传到设备管理服务器:
    ①设备管理服务器网站
    ②设备管理的API
    ③设备管理SDK中的一个
    ④清单工具的更新命令
  • 可以通过以下方式发起一次更新操作:
    ①设备管理服务器网站
    ②设备管理的API
    ③设备管理SDK中的一个

 

  • 设备要做一些是否进行固件更新的决定。诸如,该更新是否适用于这台设备;要现在更新还是晚点再更新;固件镜像要放在哪等等。我们要把这些信息在一次更新操作中传达给设备,因此要创建一个包含一些更新元数据的清单。
  • 清单会用私钥进行签名,确保只有可用的、可信任的更新才会写入存储。清单中还包含一个可用于回退到上一版本的序列号,用Unix时间戳实现。可用清单工具来生成清单。
  • 设备管理更新用证书来:确保端对端的安全性;验证固件更新是源自真实且可信的来源。

 

五、 Device Management Provision

  • 在设备大规模生产的过程中,我们可以用Device Management Provision来配置成千上万个拥有唯一加密身份和正确服务器参数的设备。它允许我们创建、注入到设备和安全存放以下连接到设备管理服务器所需的东西:
    私钥、证书、服务器URL、服务器证书、连接参数、固件更新密钥。
  • 要使设备连接到设备管理服务器,我们要将每一个IoT设备配置到符合以下条件:
    ①具有唯一的加密凭证,设备管理服务可用于:
        a. 验证设备。
        b. 生成session encryption keys。
        c. 授权设备使用设备管理系统服务。
    ②配置了向服务器描述设备的信息,用于验证软件更新的密钥,以及用于识别、连接和验证设备管理服务器的正确服务器和连接参数。
  • Provisioning SDK减少了为大规模生产设备准备制造流程的开发时间。它包含以下软件组件:
    ①密钥和配置管理器(KCM):是设备上运行的设备管理客户端软件的一部分。它可以将敏感信息安全地存储在设备的非易失性存储器中。
    ②工厂配置客户端(FCC):设备上运行的设备管理客户端软件的一部分。它将身份证书提取,验证并保存到设备。
    ③(可选)Factory Configurator Utility(FCU):可以集成到工厂车间运行的制造测试和配置设备中,以生成和打包设备身份证书。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mbedtls中,可以使用以下代码生成一个ECDSA公钥和私钥: ```c #include <stdio.h> #include "mbedtls/ecdsa.h" #include "mbedtls/pk.h" #include "mbedtls/error.h" int main(void) { int ret = 0; mbedtls_pk_context key; mbedtls_entropy_context entropy; mbedtls_ctr_drbg_context ctr_drbg; const char *pers = "ecdsa_genkey"; const mbedtls_ecp_curve_info *curve_info; mbedtls_ecdsa_context ecdsa; mbedtls_pk_init(&key); mbedtls_ctr_drbg_init(&ctr_drbg); mbedtls_entropy_init(&entropy); mbedtls_ecdsa_init(&ecdsa); //初始化随机数生成器 ret = mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func, &entropy, (const unsigned char *) pers, strlen(pers)); if (ret != 0) { mbedtls_printf("mbedtls_ctr_drbg_seed failed: %d\n", ret); goto exit; } //选择椭圆曲线 curve_info = mbedtls_ecp_curve_info_from_name(MBEDTLS_ECP_DP_SECP256R1); if (curve_info == NULL) { mbedtls_printf("mbedtls_ecp_curve_info_from_name failed\n"); goto exit; } //生成密钥对 ret = mbedtls_pk_setup(&key, mbedtls_pk_info_from_type(MBEDTLS_PK_ECKEY)); if (ret != 0) { mbedtls_printf("mbedtls_pk_setup failed: %d\n", ret); goto exit; } ret = mbedtls_ecp_gen_keypair(&curve_info->grp, mbedtls_pk_ec(key), mbedtls_ctr_drbg_random, &ctr_drbg); if (ret != 0) { mbedtls_printf("mbedtls_ecp_gen_keypair failed: %d\n", ret); goto exit; } //获取公钥和私钥 mbedtls_ecdsa_init(&ecdsa); mbedtls_ecdsa_from_keypair(&ecdsa, mbedtls_pk_ec(key)); //打印公钥和私钥 mbedtls_printf("Private key: "); for (size_t i = 0; i < mbedtls_pk_ec(key)->d_len; i++) { mbedtls_printf("%02x", mbedtls_pk_ec(key)->d[i]); } mbedtls_printf("\n"); mbedtls_printf("Public key: "); for (size_t i = 0; i < 2 * curve_info->grp.pbits / 8 + 1; i++) { mbedtls_printf("%02x", ecdsa.Qp.X.p[i]); } for (size_t i = 0; i < 2 * curve_info->grp.pbits / 8 + 1; i++) { mbedtls_printf("%02x", ecdsa.Qp.Y.p[i]); } mbedtls_printf("\n"); exit: mbedtls_pk_free(&key); mbedtls_ctr_drbg_free(&ctr_drbg); mbedtls_entropy_free(&entropy); mbedtls_ecdsa_free(&ecdsa); return ret; } ``` 在上面的代码中,使用了SECP256R1椭圆曲线生成密钥对,如果需要使用其他椭圆曲线,可以替换`MBEDTLS_ECP_DP_SECP256R1`和`mbedtls_ecp_curve_info_from_name`中的参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值