首页 > 解决方案 > 基于 REST 的基于 HTTP 签名的 Web 服务安全性

问题描述

我一直在研究为我们的 REST Web 服务使用正确的安全机制。我正在阅读有关 HTTP 签名的文档 -> https://datatracker.ietf.org/doc/html/draft-cavage-http-signatures-12

根据此文档,选择、散列和数字签名的一些 HTTP 标头。此签名字符串在 HTTP 标头中更新。服务提供者将重新创建散列(基于接收到的 HTTP 标头)并验证签名字符串以验证客户端。这也反过来证明消息没有被篡改。

某些有权访问网络的黑客是否有可能只更改 HTTP 正文而不更改作为签名一部分的标头属性。如果是,那么服务提供商收到的消息不是客户端想要的消息,不是吗?那么,这种对 HTTP 请求进行签名的方式如何保证消息的完整性呢?

标签: restweb-servicessecuritydigital-signaturehttp-signature

解决方案


您可以在标题中包含正文的摘要(哈希)。因此,如果 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] 节,并且仅作为实现者如何在签名中包含有关消息正文的信息的演示。


推荐阅读