rest - 基于 REST 的基于 HTTP 签名的 Web 服务安全性
问题描述
我一直在研究为我们的 REST Web 服务使用正确的安全机制。我正在阅读有关 HTTP 签名的文档 -> https://datatracker.ietf.org/doc/html/draft-cavage-http-signatures-12。
根据此文档,选择、散列和数字签名的一些 HTTP 标头。此签名字符串在 HTTP 标头中更新。服务提供者将重新创建散列(基于接收到的 HTTP 标头)并验证签名字符串以验证客户端。这也反过来证明消息没有被篡改。
某些有权访问网络的黑客是否有可能只更改 HTTP 正文而不更改作为签名一部分的标头属性。如果是,那么服务提供商收到的消息不是客户端想要的消息,不是吗?那么,这种对 HTTP 请求进行签名的方式如何保证消息的完整性呢?
解决方案
您可以在标题中包含正文的摘要(哈希)。因此,如果 body 发生变化,Digest 也会发生变化,并且不会与 body 的 Digest 匹配。
快速浏览您所指向的规范文档:在第 10 页的底部,如下所示:
POST /foo HTTP/1.1
主机:example.org
日期:2014 年 6 月 7 日星期二 20:51:35 GMT
内容类型:application/json
摘要:SHA-256=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=
内容长度:18{“你好世界”}
请注意,
Digest
标头字段的使用符合 RFC 3230 [RFC3230] 的第 4.3.2 [12] 节,并且仅作为实现者如何在签名中包含有关消息正文的信息的演示。
推荐阅读
- django - django中的嵌套字典
- bash - 删除多个带有行号的iptables(for循环)
- java - 对两个条件查询使用相同的谓词
- android - 如何在 doInBackground() 函数之外访问我在 onLocationResult() 函数中获取的 pincode 变量?
- c# - C# 在列表中包含一个位置
- python-3.x - 同时对两个列表进行排序,但不使用选择排序
- c - 在 Linux 中使用默认 gcc 编译器时是否需要在 C 中释放指针?
- c# - Azure Function 计时器触发器能否迭代容器或目录中的所有 Blob?
- java - JAVA 和 JAVAFX 问题 - 尝试将附加控制器连接到主控制器
- javascript - 将 React 组件导出为数组的最简洁方法是什么?