设备用私有CA签发的X.509证书接入IoT物联网平台

简介: X.509证书接入IoT物联网平台

1.创建产品和注册设备



1.1 创建产品(用私有CA认证)

  • 登录IoT物联网平台控制台
  • 在左侧导航栏,选择设备管理 > 产品
  • 在产品管理页,单击创建产品
  • 选择直连设备,认证方式选择X.509证书, 使用私有CA证书勾选

image.png
产品创建完成后,如下图:
image.png

注册设备

基于已创建的空气净化器产品,添加设备,输入设备deviceName。
image.png
注册完成后,设备处于未激活状态,其中X.509证书为空
image.png

制作设备证书

我们使用已经在IoT物联网平台注册的私有CA证书,来签发设备证书。
openssl的操作指令如下,其中CN可以填写deviceName。

# 生成pem的私有key
openssl genrsa -out device-1.key 2048
# 生成设备证书CSR
openssl req -new -key device-1.key -out device-1.csr -newkey -subj \
"/C=CN/ST=Shanghai/L=Shanghai/O=IoT/OU=iot/CN=dn3023842"
# -set_serial 指定序列号

# 用私有CA签发设备证书CRT
openssl x509 -req -in device-1.csr -CA myIoTCARoot.crt -CAkey myIoTCARoot.key -CAcreateserial -out device-1.crt -days 3650 -sha512
# 查看设备证书SN
openssl x509 -noout -text -in device-1.crt

证书生成后,我们可以查看设备证书的SN码。
image.png

绑定设备证书

绑定设备与设备证书

IoT物联网平台需要用户上传设备ProductKey,DeviceName和设备证书SN的映射关系的csv文件,内容格式如下:

ProductKey,DeviceName,CertSN
a15GiUoOzAL,dn032836,dd3dc180a02768d7


IoT物联网平台控制台证书详情页面,上传CSV文件,完成绑定。
image.png
绑定成功后,我们可以点击查看绑定结果:
image.png

设备激活

我们以Java设备为例,介绍设备以私有证书接入过程。

  • Java原生代码只能使用PKCS#8格式,我们需要用OpenSSL来进行转换,命令如下:
# 转换格式PKCS#8
openssl pkcs8 -topk8 -inform PEM -in device-1.key -out device-1_pkcs8.key -nocrypt


  • 使用TLS方式(securemode=2)将设备接入物联网平台,需使用物联网平台根证书。

请下载根证书,然后将根证书放置到resource目录下。

  • 使用iot_root.crt、设备证书、设备证书私钥来构造 SSLSocketFactory实例。
protected SSLSocketFactory createSSLSocket() throws Exception {

        // 物联网平台根证书,可以从官网文档中下载https://help.aliyun.com/document_detail/73742.html
        // 设备X.509证书,可以从控制台设备信息中下载。
        // 用来验证IoT平台的CA证书
        InputStream in = IotMqttClientWithAuthByX509.class.getResourceAsStream("/iot_root.crt");
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        Certificate ca = cf.generateCertificate(in);
        in.close();
        KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
        keyStore.load(null, null);
        keyStore.setCertificateEntry("ca", ca);
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(keyStore);

        // 传入设备证书、证书证书私钥
        InputStream certIn = IotMqttClientWithAuthByX509.class.getResourceAsStream(certPath);
        CertificateFactory certCf = CertificateFactory.getInstance("X.509");
        Certificate certCa = certCf.generateCertificate(certIn);
        certIn.close();
        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
        ks.load(null, null);
        ks.setCertificateEntry("certificate", certCa);
        
        PrivateKey privateKey = getPrivateKey(privateKeyPath);
        ks.setKeyEntry("private-key", privateKey, privateKeyPassword.toCharArray(), new Certificate[] { certCa });
        KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        kmf.init(ks, privateKeyPassword.toCharArray());
        
        // 构造socketFactory
        SSLContext context = SSLContext.getInstance("TLSV1.2");
        context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
        SSLSocketFactory socketFactory = context.getSocketFactory();
        return socketFactory;
    }


  • 设备发起MQTT的CONNECT,此时username和password无需设置
// 接入域名
String broker = "ssl://x509.itls." + regionId + ".aliyuncs.com:1883";
// MQTT的clientId
String mqttClientId = System.currentTimeMillis()+"|securemode=2|";
MemoryPersistence persistence = new MemoryPersistence();
mqttClient = new MqttClient(serverURL, mqttClientId, persistence);
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setMqttVersion(4);// MQTT 3.1.1
// 使用TLS,需要下载根证书root.crt,mqttClientId中设置securemode=2。
connOpts.setSocketFactory(createSSLSocket()); 
connOpts.setCleanSession(false); 
connOpts.setAutomaticReconnect(true); 
connOpts.setKeepAliveInterval(300);
// 设置connect回调
mqttClient.setCallback(new MqttCallback() {

    @Override
    public void messageArrived(String topic, MqttMessage message) throws Exception {

        // 只处理X.509认证返回信息
        if ("/ext/auth/identity/response".equals(topic)) {
            JSONObject json = JSONObject.parseObject(new String(message.getPayload(), StandardCharsets.UTF_8));
            // 获取到设备的productKey和deviceName
            String productKey = json.getString("productKey");
            String deviceName = json.getString("deviceName");
        } else {
            // 处理其他下行消息,强烈建议另起线程处理,以免回调堵塞。
        }
    }

    @Override
    public void deliveryComplete(IMqttDeliveryToken token) {
    }

    @Override
    public void connectionLost(Throwable cause) {
    }
});

mqttClient.connect(connOpts);

设备启动,联网后,我们可以在IoT物联网平台控制台查看设备当前状态为在线,X.509证书栏为绑定设备证书的序列号,如下图。
image.png

【往期回顾】

1.自建MQTT集群迁移阿里云IoT平台
2.IoT时代:WiFi配网技术剖析
3.微信小程序和IoT智能家居实践
4.IoT云端通用数据解析脚本实践

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2天前
|
物联网 数据挖掘 BI
基于阿里云物联网平台(IoT)的智能家居系统开发与部署
随着物联网技术的发展,智能家居成为提升生活品质的重要方向。阿里云物联网平台提供设备接入、数据管理及应用开发能力,支持亿级设备接入、高效数据管理和灵活应用开发,确保系统安全。本文通过实战案例展示如何基于该平台构建智能家居系统,涵盖设备接入、远程控制、场景联动与数据分析等功能,助力企业快速部署智能家居解决方案。
|
2月前
|
物联网 Python
请问:如何使用python对物联网平台上设备的属性进行更改?
为验证项目可行性,本实验利用阿里云物联网平台创建设备并定义电流、电压两个整型属性。通过Python与平台交互,实现对设备属性的控制,确保后续项目的顺利进行。此过程涵盖设备连接、数据传输及属性调控等功能。
|
4月前
|
安全 物联网 物联网安全
揭秘区块链技术在物联网(IoT)安全中的革新应用
揭秘区块链技术在物联网(IoT)安全中的革新应用
|
4月前
|
传感器 存储 物联网
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点,广泛应用于嵌入式系统开发、通信协议实现及后端服务构建等领域,成为推动物联网技术进步的重要力量。
115 1
|
4月前
|
存储 安全 物联网
C# 在物联网 (IoT) 应用中的应用
本文介绍了C#在物联网(IoT)应用中的应用,涵盖基础概念、优势、常见问题及其解决方法。重点讨论了网络通信、数据处理和安全问题,并提供了相应的代码示例,旨在帮助开发者更好地利用C#进行IoT开发。
186 3
|
4月前
|
安全 物联网 网络安全
智能设备的安全隐患:物联网(IoT)安全指南
智能设备的安全隐患:物联网(IoT)安全指南
260 12
|
4月前
|
Web App开发 网络协议 安全
基于Web攻击的方式发现并攻击物联网设备介绍
基于Web攻击的方式发现并攻击物联网设备介绍
67 4
|
4月前
|
传感器 监控 安全
物联网(IoT):定义、影响与未来
物联网(IoT):定义、影响与未来
221 3
|
4月前
|
安全 物联网 物联网安全
智能物联网安全:物联网设备的防护策略与最佳实践
【10月更文挑战第26天】随着物联网(IoT)技术的快速发展,智能设备已广泛应用于智能家居、工业控制和智慧城市等领域。然而,设备数量的激增也带来了严重的安全问题,如黑客攻击、数据泄露和恶意控制,对个人隐私、企业运营和国家安全构成威胁。因此,加强物联网设备的安全防护至关重要。
172 7
|
4月前
|
存储 JSON 运维
智能物联网平台:Azure IoT Hub在设备管理中的实践
【10月更文挑战第26天】随着物联网技术的发展,Azure IoT Hub成为企业管理和连接数百万台设备的强大平台。本文介绍Azure IoT Hub的设备管理功能,包括设备注册、设备孪生、直接方法和监控诊断,并通过示例代码展示其应用。
137 4

相关产品

  • 物联网平台