IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 使用模版自动化 Amazon IoT 设备创建及证书注册过程 -> 正文阅读

[嵌入式]使用模版自动化 Amazon IoT 设备创建及证书注册过程

a4ee9cfb9696c6866d3b7db1f9c70ec7.gif

背景介绍

利用即时注册(JITR)功能,可以快速的进行设备证书注册及设备上线。但是配置相关 Amazon Lambda 函数的方式相对复杂。使用本文介绍的即时部署(JITP)功能,可以简化?Amazon?IoT 规则和 Amazon Lambda 函数的步骤,直接在注册设备 CA 证书的同时附加上一个自定义好的模版。在设备第一次连接 Amazon IoT 平台的时候,JITP 会参照该模版的定义来完成设备证书的注册和设备在云端的创建过程。

需要特别注意的是,JITP 作为一个相对比较新的功能,目前在亚马逊云科技中国区还没有部署。如果设备需要连接亚马逊云科技中国区,还是需要使用 JITR 来完成证书注册及设备上线。但对于一些需要在海外使用亚马逊云科技的用户,可以利用这个功能对设备进行设备注册控制。

e06d89de28d7440141f7164afdf2e261.png

从上图 JITR 和 JITP 两种方式的对比中可以看出, JITP 简化了部分流程。

JITP 的实现步骤如下:

1.创建 CA 证书, 模版和相应的 Amazon IAM 权限。

2.在?Amazon?IoT 平台上注册和激活 CA 证书并附加模版。

3.使用该 CA 证书签发设备证书并安装在 ?Amazon?IoT 设备上。

4.Amazon IoT 设备与 Amazon IoT 平台的第一次连接。

本文中的 Amazon IoT 设备将会使用一台 Amazon Linux EC2 实例进行模拟,并使用 MQTT Mosquitto Client 工具来模拟 MQTT 终端,Amazon IoT 设备的配置工作会在这台 Amazon EC2 实例上进行。

创建 CA 证书,模版和相应的 Amazon IAM 权限

登陆 Amazon EC2 实例并执行如下命令创建私钥和对应的 CA 证书:

$?mkdir?cert
$?cd?cert
$?openssl?genrsa?-out?CA_Private.key?2048
$?openssl?req?-x509?-new?-nodes?-key?CA_Private.key?-sha256?-days?365?-out?CA_Certificate.pem

*左滑查看更多

在最后一步创建 CA 证书时会要求填入 Amazon CSR 相关信息,请按照实际情况填写:

Country?Name?(2?letter?code)?[XX]:
State?or?Province?Name?(full?name)?[]:
Locality?Name?(eg,?city)?[Default?City]:
Organization?Name?(eg,?company)?[Default?Company?Ltd]:
Organizational?Unit?Name?(eg,?section)?[]:
Common?Name?(eg,?your?name?or?your?server's?hostname)?[]:
Email?Address?[]:

由于 JITP 是通过模版定义来注册设备证书和创建设备,因此模版中相应的权限必不可少。下面我们在 Amazon IAM 中来创建一个角色并赋予相应的权限。

1.登陆到 Amazon Console 并进入 Amazon IAM 页面。

2.点击页面左侧的角色后,点击创建角色按钮。

a239702d5d346bfd5b7da2c9140e2d56.png

3.在创建角色页面选择“亚马逊云科技产品”中的 Amazon IoT,然后点击”下一步:权限”。


74b0231fa6f6133ec43a1986fa7b48e5.png

4.在这个页面中不需要做任何改动,直接点击”下一步:审核”

5.填写角色名称“JITP”后,点击创建角色。

8e397fa61610d7c4649fc7925945acb7.png

?6.角色创建完成后,点击角色名称 JITP 并记录下角色ARN(arn:aws:iam::12345678910:role/JITP)。

在这个页面中不需要做任何改动,直接点击”下一步:审核”

填写角色名称“JITP”后,点击创建角色。

角色创建完成后,点击角色名称 JITP 并记录下角色ARN(arn:aws:iam::12345678910:role/JITP)。

在准备好角色和权限后我们开始创建模版,这个模版会在之后注册 CA 证书的时候一起提交给 Amazon IoT Core。

这里的模版实际上就是一个 JSON 文档,里面包含两部分。一部分是参数(Parameters),另一部分是资源(Resource).

Parameters部分你可以定义如下内容:

  • AWS::IoT::Certificate::Country

  • AWS::IoT::Certificate::Organization

  • AWS::IoT::Certificate::OrganizationalUnit

  • AWS::IoT::Certificate::DistinguishedNameQualifier

  • AWS::IoT::Certificate::StateName

  • AWS::IoT::Certificate::CommonName

  • AWS::IoT::Certificate::SerialNumber

  • AWS::IoT::Certificate::Id

在下面的模版中我们定义了两个 Parameters,一个是 AWS::IoT::Certificate::Country,另一个是 AWS::IoT::Certificate::Id。这样在设备首次连接 Amazon IoT 平台时,设备证书中对应的这两个字段会被抽取出来用于 Resources 中 Thing 的创建。第二行的 roleARN 是前面创建的角色 JITP 的 ARN (Amazon Resource Names),如果按照步骤做的话应该已经记录下来了。

{
?"templateBody":"{?\"Parameters\"?:?{?\"AWS::IoT::Certificate::Country\"?:?{?\"Type\"?:?\"String\"?},?\"AWS::IoT::Certificate::Id\"?:?{?\"Type\"?:?\"String\"?}?},?\"Resources\"?:?{?\"thing\"?:?{?\"Type\"?:?\"AWS::IoT::Thing\",?\"Properties\"?:?{?\"ThingName\"?:?{\"Ref\"?:?\"AWS::IoT::Certificate::Id\"},?\"AttributePayload\"?:?{?\"version\"?:?\"v1\",?\"country\"?:?{\"Ref\"?:?\"AWS::IoT::Certificate::Country\"}}?}?},?\"certificate\"?:?{?\"Type\"?:?\"AWS::IoT::Certificate\",?\"Properties\"?:?{?\"CertificateId\":?{\"Ref\"?:?\"AWS::IoT::Certificate::Id\"},?\"Status\"?:?\"ACTIVE\"?}?},?\"policy\"?:?{\"Type\"?:?\"AWS::IoT::Policy\",?\"Properties\"?:?{?\"PolicyDocument\"?:?\"{\\\"Version\\\":?\\\"2012-10-17\\\",\\\"Statement\\\":?[{\\\"Effect\\\":\\\"Allow\\\",\\\"Action\\\":?[\\\"iot:*\\\"],\\\"Resource\\\"?:?[\\\"*\\\"]}]}\"?}?}?}?}",
?"roleArn":"arn:aws:iam::1234567890:role/JITP"
}

*左滑查看更多

我们将这段 JSON 代码保存到 Amazon EC2 实例中~/cert 文件夹里面的一个文件中,文件名为 provisioning-template.json。

这个模版实际上规定了在设备连接时, ?Amazon? IoT Core 会创建两样东西,一个是 Thing(设备在云上的映射),另外一个是 Policy(操作权限),您可以从模版中 Resources中看到,并且接下来 JITP 还会自动做三件事:

  • 将 Policy 赋予证书

  • 将证书挂载到 Thing 上面

  • 更新证书状态为 Active

在Amazon?IoT 平台上注册和激活 CA证书

附加模版

有了之前的准备工作,我们可以开始注册CA证书和模版到 Amazon IOT Core。为了安全,?Amazon?OT Core提供了相应的审核流程确保你同时持有 CA 证书和对应的私钥。因此,在最终注册 CA 证书之前,我们还需要利用 CA 证书生成一张用于验证CA 证书和私钥持有者身份的中间证书。下面这个?Amazon?CLI 命令会返回一个随机生成的认证码,这个认证码会和你的账户绑定。记录下这个认证码,很快我们就会用到。

$?aws?iot?get-registration-code

*左滑查看更多

使用 OpenSSL 生成用于验证身份的私钥和证书请求文件(Amazon CSR – Certificate Signing Request):

$?openssl?genrsa?-out?Verification_Private.key?2048

$?openssl?req?-new?-key?Verification_Private.key?-out?Verification.csr

*左滑查看更多

在创建 Amazon CSR 的过程中,你会被提示输入如下一些内容,将前一步记录下的认证码填入到 Common Name 中:

...
?Organization?Name?(eg,?company)?[]:
?Organizational?Unit?Name?(eg,?section)
?Common?Name?(e.g.?server?FQDN?or?YOUR?name)?[]:?XXXXXREGISTRATIONCODEXXXXX
?...

*左滑查看更多

接下来,使用 CA 证书和私钥,以及上面创建的 Amazon CSR 来生成一份用于验证身份的证书:

$?openssl?x509?-req?-in?Verification.csr?-CA?CA_Certificate.pem?-CAkey?CA_Private.key?-CAcreateserial?-out?Verification.crt?-days?365?-sha256

*左滑查看更多

最后,通过如下命令导入 CA 证书和中间证书完成 CA 证书的注册和激活。同时,通过设置–allow-auto-registration 的方式,开启设备连接至 ?Amazon?IoT Core 时设备证书的自动注册,并通过–registration-config 绑定模版到 CA 证书上。这个命令的输出会返回对应 CA 证书在 Amazon?IoT Core 上的证书 arn (certificateArn)和证书 ID (caCertificateId).

$?aws?iot?register-ca-certificate?--ca-certificate?file://CA_Certificate.pem?--verification-certificate?file://Verification.crt?--set-as-active?--allow-auto-registration?--registration-config?file://provisioning-template.json

*左滑查看更多

这时如果你进入?Amazon? IoT Core 服务,点击左侧的安全—>CA,会看到我们的 CA 已经注册到了?Amazon?IoT 平台上了。

fe4e3a3a32b39a8353773949a0c0c9f5.png

使用 CA 证书签发设备证书

当我们创建并注册好CA证书之后,就可以开始用这个CA证书来签发设备证书了,步骤如下:

1.创建一个设备证书的私钥 Device.key 和对应的证书请求文件 Device_Certificate.csr:

$?openssl?genrsa?-out?Device.key?2048
$?openssl?req?-new?-key?Device.key?-out?Device_Certificate.csr

2. 使用 CA 证书,CA 证书私钥和证书请求文件签发设备证书 Device_Certificate.crt:

$?openssl?x509?-req?-in?Device_Certificate.csr?-CA?CA_Certificate.pem?-CAkey?CA_Private.key?-CAcreateserial?-out?Device_Certificate.crt?-days?365?-sha256

*左滑查看更多

Amazon IoT 设备与Amazon IoT 的第一次连接

你可以在你的 Amazon IoT 设备上安装亚?Amazon? IoT SDK,通过自己的代码调用 SDK 来实现所有的功能。这里我们为了简化步骤和节约时间,选择利用 Amazon EC2 上安装 MQTT Mosquitto Client 工具来模拟 MQTT 终端。

1.登陆到 Amazon EC2 实例并执行如下命令:

$?sudo?wget?http://download.opensuse.org/repositories/home:/oojah:/mqtt/CentOS_CentOS-7/home:oojah:mqtt.repo?-O?/etc/yum.repos.d/mqtt.repo
?$?sudo?yum?install?mosquitto?mosquitto-clients?-y

*左滑查看更多

2. 如果上面的命令执行时报依赖缺少的错误,可以加上–skip-broken再执行一遍即可

$?sudo?yum?install?mosquitto?mosquitto-clients?-y?--skip-broken

*左滑查看更多

3. 进入到之前创建的 cert 目录

$?cd?cert

4. 合并 CA 证书和设备证书到一个新的证书形成有效的证书链:

$ cat Device_Certificate.crt CA_Certificate.pem > Device_CA_Certificate.crt

5. 执行 mosquitto_pub 命令去发布一个消息到对应的 topic 上面,这也是设备与 ?Amazon?IoT Core 的第一次连接。如果你回想一下之前的步骤,到目前为止我们的设备证书还只存在于设备上面,并没有在 ?Amazon?IoT Core 上注册,那么接下来我们尝试发送一条消息。

$?mosquitto_pub?--cafile?root-CA.crt?--cert?Device_CA_Certificate.crt?--key?Device.key?-h?xxxxxxxxxxxxxx.iot.us-east-1.amazonaws.com?-p?8883?-q?1?-t?JITP/test?-i?anyclientID?--tls-version?tlsv1.2?-m?"Hello"?-d

*左滑查看更多

  • 命令中的–cafile 是 ?Amazon?IoT 平台的 CA 证书,用于设备去验证?Amazon? IoT 平台的身份,这个文件可以通过此链接获得。

  • 命令中的–cert 是合并 CA 证书和设备证书后的证书链。

  • 命令中的–key 是设备的私钥。

  • 命令中的-h 是?Amazon?IoT 平台的接入点,可以通过在?Amazon?IoT 界面中左下角点击“设置”获得。

  • 命令中的-t 是你要发布消息到哪一个 topic 上,这里我是发布到 JITP/test,你可以选择自己想要

  • 发布的 topic.

  • 命令中的-i 可以按照你希望的名字命名

6. 成功连接并发布消息后会有如下的输出,并且如果你登录 ?Amazon?IoT 界面,点击左侧的安全—>证书后可以看到设备证书已经注册并激活了。

Client?anyclientID?sending?CONNECT
Client?anyclientID?received?CONNACK
Client?anyclientID?sending?PUBLISH?(d0,?q1,?r0,?m1,?'JITP/test',?...?(5?bytes))
Client?anyclientID?received?PUBACK?(Mid:?1)
Client?anyclientID?sending?DISCONNECT

*左滑查看更多

569830a1d885aae81c2a56f849a1e272.png

本篇作者

d36484147e5a3da103db9409527813ec.png

郭松

亚马逊云科技解决方案架构师

负责企业级客户的架构咨询及设计优化,同时致力于 Amazon IoT 和存储服务在国内和全球企业客户的应用和推广。加入亚马逊云可进之前在EMC研发中心担任系统工程师,对企业级存储应用的高可用架构,方案及性能调优有深入研究。

4b4c69ff8636bee8290f1acbacd480ba.gif

159a200616eac1a170754e684b03ae76.gif

听说,点完下面4个按钮

就不会碰到bug了!

dd16334bfa74c6d5caa23c00efbd7a90.gif

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:43:26  更:2021-11-09 19:45:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:36:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码