支持消息体校验和

https://blueprints.launchpad.net/zaqar/+spec/support-md5-of-body

现在,Zaqar 将添加一个非 URL 编码的消息体校验和功能。这对于消息体的安全性至关重要,可以防止消息被篡改。

问题描述

目前,Zaqar 没有非 URL 编码的消息体校验和。这是一个提高消息体安全性的良好特性。

AWS SQS 服务已经支持此功能,这对于 Zaqar 来说是一个很好的参考[1].

提议的变更

当用户声明或获取消息时,校验和将与消息体一起返回,以便用户可以使用它来验证消息体是否正确。目前 zaqar 仅支持基于 MD5 摘要的非 URL 编码消息体的校验和。未来版本中可能会支持其他算法,包括 SHA1、sha256、sha512 等。因此,有必要修改以下内容

  1. 为消息添加一个新的属性,名为 checksum。此属性为字符串类型。

    当您将消息发送到队列时,Zaqar 将使用默认校验和算法 MD5 来计算非 URL 编码消息体的 checksum 值。最后 Zaqar 将在后端存储该值。现在后端 Mongodb、Redis 和 Swift 可以支持。

  2. 当用户声明或获取消息时,返回消息的 checksum 属性。

    当用户获取或声明消息时,API 将在消息体中返回 checksum 的键值对。然后用户可以使用此值来验证新检索到的消息体是否正确。

  3. 此功能向后兼容。

    对于没有校验和属性的旧消息,在 claimget 操作中,校验和将返回 None。此功能也将随着旧消息逐渐过期而平稳过渡。

  4. 为不同后端上的消息体和队列添加新的数据模型。

    MESSAGE

    +----------------------+---------+
    |  Name                |  Field  |
    +======================+=========+
    |  checksum            |   cs   |
    +----------------------+---------+
    |  body                |   b     |
    +----------------------+---------+
    |  ...                 |   ...   |
    +----------------------+---------+
    

缺点

备选方案

实现

负责人

主要负责人

cdyangzhenyu <cdyangzhenyu@gmail.com>

里程碑

完成目标里程碑

Queens RC1

工作项

  1. 为 Mongodb、Redis 和 Swift 添加消息体校验和支持。

  2. 添加此功能的发布说明。

  3. 更新 API 参考。

  4. 添加此功能的开发者文档。

  5. 相应地更改单元测试、功能测试和 tempest 测试。

依赖项

参考资料

[1]:https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_Message.html