You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用RestTemplate发送S3的HTTP GET请求出现SignatureDoesNotMatch错误的原因是什么

S3 SignatureDoesNotMatch 报错常见触发场景

完整报错信息:The request signature we calculated does not match the signature you provided. Check your key and signing method

以下是使用RestTemplate调用S3 GET接口时该报错的常见触发原因:

  • 访问密钥配置错误:使用的AK(访问密钥ID)、SK(秘密访问密钥)本身填写错误,比如字符遗漏、多了前后空格;或者所用密钥已经被IAM账号禁用、删除,也会导致签名校验不通过。
  • 签名算法版本不匹配:2014年之后上线的AWS区域仅支持V4版本签名,如果代码手动实现签名时用了旧的V2版本算法,或者签名算法配置和S3服务端要求不一致,就会触发报错。
  • 请求头不符合签名规范:S3签名要求将指定请求头按字典序排序后参与计算,常见问题包括:Host头值填写错误、x-amz-*前缀的自定义请求头没有全部加入签名范围、请求头值前后存在未清理的多余空格、特殊字符没有按UTF-8规范编码。
  • 对象路径编码规则不一致:如果请求的S3对象Key包含空格、中文、%、+等特殊字符,RestTemplate自动编码的规则和S3签名要求的编码规则不统一,比如空格被编码为+而不是S3要求的%20、路径分隔符/被二次编码,都会导致两端计算的签名不一致。
  • 本地时间与服务端时间差过大:签名计算时使用的本地时间和AWS服务端时间差超过15分钟,会直接触发签名校验失败,常见于本地机器时钟未同步、时区配置错误的场景。
  • 请求参数处理错误:GET请求的Query参数(比如X-Amz-Expires、response-content-type等签名关联参数)没有按ASCII码排序后加入签名计算,或者多传、漏传、写错了签名范围内的参数,也会导致校验不通过。
  • RestTemplate后置修改请求内容:如果RestTemplate配置的拦截器、消息转换器在签名计算完成后,自动修改了请求头、请求路径(比如自动追加Content-Length头、对路径二次编码),会导致实际发出的请求内容和参与签名的内容不一致,触发签名不匹配。

内容的提问来源于stack exchange,提问作者Limor_Sh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:45:04