校验消息签名
操作场景
为了确保安全,提供订阅确认、取消订阅和消息的签名认证,在消息的接收方需要对SMN发送的消息进行校验,消息类型包括订阅确认消息、通知消息和取消订阅通知消息。使用SMN消息中的信息,您可以通过签名串验证消息的合法性。
操作步骤
验证SMN发送的HTTP(S)请求的流程如下:
- SMN将根据您终端节点接收的HTTP消息,使用其中关键的键-值信息进行签名验证,具体的验证签名键信息请参考特定消息类型的签名键值信息。
- 通过HTTP消息中的signing_cert_url获取证书内容的地址,通过该地址获取证书内容,并且生成X509证书。
下载证书的链接始终是HTTPS请求,需要验证下载链接服务器的证书的真伪。
- 从X509证书中提取公钥,用于验证收到消息的可靠性和完整性。
- 确定消息类型。消息类型为键type对应的值,不同的消息类型对应不同的签名证书验证方式。
- 创建签名字符串。将消息中的键值对取出来,使其键值按字典序排序。每一个键占一行,每一个值占一行,键所对应的值在该键所占行的下一行。
特定消息类型的签名键值信息
- 消息通知
- 消息通知必须包括以下键,如果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
每一个键占一行,每一个值占一行,键所对应的值在该键所占行的下一行。
- 消息通知必须包括以下键,如果subject为空,则不参与签名:
- 订阅确认和取消订阅
- 订阅确认和取消订阅的消息中必须包含以下键:
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
每一个键占一行,每一个值占一行,键所对应的值在该键所占行的下一行。
- 订阅确认和取消订阅的消息中必须包含以下键: