微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Bash 中验证 HTTP HMAC 签名? 更新:更新 2:更新 3:更新 4:

如何解决如何在 Bash 中验证 HTTP HMAC 签名? 更新:更新 2:更新 3:更新 4:

我需要验证我使用的程序的 HTTP HMAC 签名(Drone CI,尝试创建扩展),但我没有尝试让结果匹配。

具体来说,HTTP 请求如下所示:

POST / HTTP/1.1
Host: 127.0.0.1
User-Agent: Go-http-client/1.1
Content-Length: 50
Accept: application/vnd.drone.validate.v1+json
Accept-Encoding: identity
Content-Type: application/json
Date: Wed,09 Jun 2021 01:25:07 GMT
Digest: SHA-256=digest
Signature: keyId="hmac-key",algorithm="hmac-sha256",signature="signature",headers="accept accept-encoding content-type date digest"

{"data":"data"}

我尝试过使用 sha256sumhmac256openssl,交换 Digestsignature 的值,但它们都不是使任何东西都匹配。


更新:

我已经尝试了以下代码,但它似乎仍然不起作用:

MESSAGE='{"data":"data"}'
SECRET="secret" # This isn't any value in the request,is it?

echo -n "${MESSAGE}" | openssl dgst -sha256 -hmac "${SECRET}" | base64 -w 0

更新 2:

HMAC examples on Wikipedia 对我来说工作得很好。我可能会从 HTTP 请求中搞砸什么吗?

如果值得的话,请求签名显然是基于 draft-cavage-http-signatures-10


更新 3:

我尝试使用以下格式创建签名,但仍然没有骰子:

{"data":"data"}
accept: application/vnd.drone.validate.v1+json
accept-encoding: identity
content-type: application/json
date: Wed,09 Jun 2021 01:25:07 GMT
digest: SHA-256=digest

假设以上文本存储在变量 ${hmac_data} 下,以下内容用于尝试(但失败)达到 signature 的值:

echo -n "${hmac_data}" | openssl dgst -sha256 -hmac "${key}" | awk '{print $2}' | base64 -w 0

更新 4:

经过大量的混乱之后,Kiskae's answer 帮我找到了解决方案。

除了他所说的之外,我发现 Drone base64 对字符串的二进制版本进行编码,而不是 ASCII 版本。

因此,上述命令的新版本(与 Drone CI 一起使用时)将如下所示:

${MESSAGE} 等于以下内容

accept: application/vnd.drone.validate.v1+json
accept-encoding: identity
content-type: application/json
date: Wed,09 Jun 2021 01:25:07 GMT
digest: SHA-256=digest

还有命令:

echo -n "${MESSAGE}" | openssl dgst -sha256 -hmac "${SECRET}" -binary | base64 -w 0

解决方法

他们似乎在使用 http signatures draft 的实现。

链接的文档解释了需要计算签名的方式以及如何验证它。但这可能是您的示例不起作用的原因:

2.1.3.标题

可选。 headers 参数用于指定列表 生成消息签名时包含的 HTTP 标头。

基本上签名不只包含消息,可能是为了防止重放攻击。由于您只是对消息进行哈希处理,因此它按预期工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。