Skip to main content

Azure IoT Hub中X509证书的应用基础

分类:  Azure物联网 标签:  #Azure #IoT Hub # 发布于: 2023-06-12 21:50:30

在开始之前,我们先来简单的回顾一下证书的基础知识:证书是包含实例公钥的数字文档(仅仅包含公钥), 可以用于确定证书的使用者真实身份。一般情况下可以向证书颁发机构购买证书(CA: certificate authority), 或者如果是在测试环境中,也可以使用工具创建自签名的证书,创建自签名证书之后,可以使用它来签发设备证书或者中间步骤使用的中间证书,从而形成证书链。

  • 算法:定义原始明文数据如何转换成密文,以及密文如何转换回明文。
  • 密钥:是随机或者伪随机的数据字符串,用作算法的输入。
  • 证书:包含实体公钥的数字文档。
  • 证书颁发机构: certificate authority

密码

用户保护信息和通信,使用加密技术将明文转换为密文,然后再将其转换回来,一般有如下目标:

  • 机密性: 信息只有目标受众才能理解。
  • 完整性:无法在存储中或者传输过程中更改信息。
  • 不可否认性:信息创建者以后不能否认该创建操作。
  • 身份验证:发送方和接收方可以确认彼此的身份。

加密

加密过程需要一种算法和一个密钥。 算法定义如何将数据从明文转换为密文,以及如何将密文转换回明文。 密钥是随机数据字符串,用作算法的输入。 该过程的所有安全性都包含在密钥中。 因此,必须安全地存储密钥。 然而,最常用的算法的详细信息是公开提供的。

有两种类型的加密。 对称加密使用同一密钥进行加密和解密。 非对称加密使用不同但数学上相关的密钥进行加密和解密。

对称加密

对称加密使用同一密钥将明文加密为密文,以及将密文解密为明文。 密钥的必要长度(以位数表示)取决于算法。 在使用密钥来加密明文之后,加密的消息被发送给接收方,然后接收方对密文进行解密。 对称密钥必须安全地传输给接收方。 使用对称算法时,最大的安全风险是在发送密钥的过程中。

非对称加密

如果只使用对称加密,存在的问题是通信各方必须拥有私钥。 但是,在你向经授权用户传输密钥的过程中,未经授权的第三方可能会捕获密钥。 若要解决此问题,请改用非对称加密或公钥加密。

在非对称加密中,每个用户都有两个数学上相关的密钥,称为密钥对。 一个密钥是公开的,另一个密钥是私密的。 密钥对确保只有接收方才能访问解密数据所需的私钥。 下图总结了非对称加密过程。


  1. 接收方创建一个公钥-私钥对,并将公钥发送给某个 CA。 CA 将公钥打包在 X.509 证书中。
  2. 发送方从 CA 获取接收方的公钥。
  3. 发送方使用某种加密算法来加密明文数据。 使用接收方的公钥执行加密。
  4. 发送方将密文传输给接收方。 不需要发送密钥,因为接收方已经有解密密文所需的私钥。
  5. 接收方使用指定的非对称算法和私钥来解密密文。

组合使用对称加密和非对称加密

可以将对称加密和非对称加密组合使用,以利用它们的相对优势。 对称加密比非对称加密快得多,但由于需要向其他方发送私钥,因此不那么安全。 若要将这两种类型组合使用,可以使用对称加密将明文转换为密文。 使用非对称加密来交换对称密钥。 下图对此进行了演示。


  1. 发送方得到接收方的公钥。
  2. 发送方生成一个对称密钥,并使用它来加密原始数据。
  3. 发送方使用接收方的公钥来加密对称密钥。
  4. 发送方将加密后的对称密钥和密文传输给目标接收方。
  5. 接收方使用与接收方的公钥匹配的私钥来解密发送方的对称密钥。
  6. 接收方使用对称密钥来解密密文。

非对称签名

可以使用非对称算法来防止数据修改,并证明数据创建者的身份。 下图显示了非对称签名如何帮助证明发送方的身份。


  1. 发送方通过非对称加密算法传递明文数据,使用私钥进行加密。 请注意,此场景逆转了前面详述非对称加密的部分中概述的私钥和公钥的使用。
  2. 生成的密文发送给接收方。
  3. 接收方从目录中获取发起方的公钥。
  4. 接收方使用发起方的公钥来解密密文。 生成的明文证明发起方的身份,因为只有发起方可以访问最初对原始文本进行加密的私钥。

签名

数字签名可用于确定数据在传输过程中或静态时是否被修改。 数据通过哈希算法传递,该算法是一个单向函数,可以根据给定的消息产生数学结果。 结果称为“哈希值”、“消息摘要”、“摘要”、“签名”或“指纹”。 无法反转哈希值来获取原始消息。 因为消息中的小更改会导致指纹中的显著更改,所以可以使用哈希值来确定消息是否已更改。 下图展示了如何使用非对称加密和哈希算法来验证消息是否未被修改。


  1. 发送方创建一条明文消息。
  2. 发送方将明文消息哈希化以创建消息摘要。
  3. 发送方使用私钥来加密摘要。
  4. 发送方将明文消息和加密的摘要传输给目标接收方。
  5. 接收方使用发送方的公钥来解密摘要。
  6. 接收方运行发送方对消息使用的哈希算法。
  7. 接收方将生成的签名与解密的签名进行比较。 如果两个摘要相同,则消息在传输过程中没有被修改。

X.509证书如何在Azure IoT Hub中证明自己的身份

我们之前学习了关于加密,解密的基础知识,那么我们如何在Azure IoT Hub中应用这些知识来保证我们所使用的设备像它自己声明的那样,是合法的设备呢?

Azure IoT Hub使用x509证书对设备进行认证的方法和步骤如下:

  1. 用户在取得CA的证书之后(用户的根证书,注意如果是从CA购买,该根证书的意思仅仅是对该用户而言,实际上也是通过CA签名的证书, 如果是自签名证书,那么就是真正意义上的根证书), 需要将该证书上传到Azure IoT Hub, 注意该证书不要包括私钥(例如pfx证书)。
  2. 上传之后,需要让IoT Hub认证该证书的真正用户就是你,因此IoT Hub会使用一串随机数字,用户从Portal上得到该数字之后,使用保存在本地的私钥加密该字符串,生成也给验证的文件。
  3. 上传该文件到Azure IoT Hub, Azure IoT Hub使用上传的证书解密该验证文件,解密之后的字符串和保存在后台的字符串对比。

对比结果一致的话,那么就完成了根证书的验证,用户只需要上传一次该证书即可。验证完成根证书之后,如果用户使用x509证书链接的设备使用如下的流程和步骤来认证:

  1. 用户直接使用根证书签署设备(设备侧保留有具备公钥的设备证书和私钥)
  2. 用户需要创建多个中间证书来满足中间的业务生产,到了设备签名的时候,该设备上需要具备完整的证书链以及设备的私钥。
  3. 认证的时候,设备需要上传完整的证书或者证书链,IoT Hub会启用根证书验证证书或者证书链的有效性和完整性。
  4. IoT Hub会使用设备上传的信息,随机生成一个字符串或者文件,传送回给设备,设备使用私钥加密该信息,并返回给IoT Hub
  5. IoT Hub使用保留的信息解密私钥加密后的信息做对比,对比一致,则该设备认证成功。

理解了前面的基础知识之后,对于设备使用x509证书认证是非常容易理解的,实际上就是类似于非对称签名的基本步骤,所以这个方案中唯一的依赖就是设备上私钥的保密存储,这一点对于设备制造商可以考虑在设备上加上一个硬件的芯片,该芯片使用硬件的手段来保存存储于设备上的私钥。

总结一下如何在Azure IoT Hub中使用x509证书的基本步骤:

  • 取得x509证书
  • IoT Hub注册证书
  • 向设备签发设备证书(可能包含证书链)
  • 设备使用设备证书和证书链,设备私钥链接IoT Hub

另外关于为什么需要在工业生产中使用X.509证书链,详细的阐述可以参考文档:https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-x509ca-concept, 也非常通俗易懂。

之后我们会以教程的形式来step by step的描述如何通过生成自签名证书,如何使用自签名证书完成这个过程。