更新时间:2024-04-19 GMT+08:00

校验消息签名

操作场景

为了确保安全,提供订阅确认、取消订阅和消息的签名认证,在消息的接收方需要对SMN发送的消息进行校验,消息类型包括订阅确认消息、通知消息和取消订阅通知消息。使用SMN消息中的信息,您可以通过签名串验证消息的合法性。

操作步骤

验证SMN发送的HTTP(S)请求的流程如下:

  1. SMN将根据您终端节点接收的HTTP消息,使用其中关键的键-值信息进行签名验证,具体的验证签名键信息请参考特定消息类型的签名键值信息
  2. 通过HTTP消息中的signing_cert_url获取证书内容的地址,通过该地址获取证书内容,并且生成X509证书。

    下载证书的链接始终是HTTPS请求,需要验证下载链接服务器的证书的真伪。

  3. 从X509证书中提取公钥,用于验证收到消息的可靠性和完整性。
  4. 确定消息类型。消息类型为键type对应的值,不同的消息类型对应不同的签名证书验证方式。
  5. 创建签名字符串。将消息中的键值对取出来,使其键值按字典序排序。每一个键占一行,每一个值占一行,键所对应的值在该键所占行的下一行。

特定消息类型的签名键值信息

  1. 消息通知
    • 消息通知必须包括以下键,如果subject为空,则不参与签名:
      message
      message_id
      subject
      timestamp
      topic_urn
      type
    • 一个消息通知使用的签名键值信息示例如下:
      message
      My test message
      message_id
      88c726942175432bac921eafd0036163
      subject
      demo
      timestamp
      2016-08-15T07:29:16Z
      topic_urn
      urn:smn:regionId:74dc9e44d0cc4573adfce91cdfdd3ba9:xxxx
      type
      Notification

      每一个键占一行,每一个值占一行,键所对应的值在该键所占行的下一行。

  2. 订阅确认和取消订阅
    • 订阅确认和取消订阅的消息中必须包含以下键:
      message
      message_id
      subscribe_url
      timestamp
      topic_urn
      type
    • 一个订阅确认的消息简单示例如下所示:
      message
      You are invited to subscribe to topic: urn:smn:regionId:d91989905b8449b896f3a4f0ad57222d:demo. To confirm this subscription, please visit the following SubscribeURL in this message.
      message_id
      def5c309cbff44d5a870787ed937edf8
      subscribe_url
      https://ip地址/smn/subscription/confirm?region_id&token&topic_urn:demo
      timestamp
      2016-08-15T07:29:16Z
      topic_urn
      urn:smn:regionId:d91989905b8449b896f3a4f0ad57222d:demo
      type
      SubscriptionConfirmation

      每一个键占一行,每一个值占一行,键所对应的值在该键所占行的下一行。