腾讯云和阿里云的 API 鉴权都是公共参数+接口参数排序后计算 HMAC 当作签名。而 Cloudflare,Github,Godaddy 的 API 往往都是直接把凭据写进 HTTP 头,然后直接发请求。
使用 HMAC 的优点是凭据无需通过互联网传输,然而 API Key 的特点就是很长,保存在计算机上而不是用脑子记,可以定期更换,泄露也不会导致撞库攻击,为什么要对 API Key 采取比密码更严格的保护措施?以及 HMAC 方案应对的威胁模型是什么?
另外,阿里云和腾讯云的 API 都单独具有抗重放攻击性,在两端点不被入侵的情况下 HTTPS 已经确保了这一点。如果客户机或服务器被入侵,HMAC 签名似乎也只能增大一点点攻击难度,理论上并不能阻止入侵或非法调用 API 。
再者就是,如果一定要用数字签名,为什么他们不用JWS之类的方案,而要用排序接口参数再签名的方案?文档上也往往没有具体说排序的标准,大写在前还是小写在前也不清晰,尽管接口行为往往和编程语言的排序库行为一致,不过作为 API 文档来说,这是有歧义的。
并且,阿里云 API 接口编码来编码去的,好像也没有比 JWS 简洁多少……
1
oott123 2020-10-05 22:27:06 +08:00 1
你比较的对象错了,你要去看看 AWS 的 API 咋签名的,因为国内这些云也是参考 AWS 之类的东西的
|
2
kangsheng9527 2020-10-05 22:35:17 +08:00
相互伤害(增加攻击成本,计算消耗了攻击方 cpu 时间),防止低成本攻击。
正如你说的保护原始 key 。。。增加接触 api 的人员门槛有助于整个圈子的健康。。。 我是认同国内这一套的。。。 刚好我也用过阿里云 api 。。。 |
3
Explr OP @oott123 有道理,AWS 的方案是相似的,我最近在维护一个 ACME 客户端,从 Let's encrypt 自动获取数字证书,要用 API 增删 DNS 记录,所以就把阿里云、腾讯云和 Cloudflare 、Godaddy 联系起来了。不过说真的,为啥不用 JWS……
|
4
Explr OP @kangsheng9527 对,不过我总不能为了增删一下 DNS 记录,就把整个阿里云 SDK 加进项目依赖吧……API 调用还得自己写……
|
5
lihongming 2020-10-07 01:51:09 +08:00 via iPhone
安全性和方便性肯定是相对的,但有 SDK 的情况下,自己其实不用处理签名,通过 SDK 发起请求就好
|