OSS报SignatureDoesNotMatch错误的解决

我们的oss是部署在内网的,下面讲一下解决过程。 首先前置条件要具备: 1.endpoint通不通 2.确保你的AK(AccessKeyId)是对的 3.确保你的AS(AccessKeySecret)是正确的 4.objectKey真实存在 5.URL正确格式: http://bucketName ...
OSS报SignatureDoesNotMatch错误的解决
OSS报SignatureDoesNotMatch错误的解决

我们的oss是部署在内网的,下面讲一下解决过程。

首先前置条件要具备:
1.endpoint通不通
2.确保你的AK(AccessKeyId)是对的
3.确保你的AS(AccessKeySecret)是正确的
4.objectKey真实存在
5.URL正确格式:http://bucketName.{endpoint}/{test/fileName.pdf}?AccessKeyId=xxxxxx&Expired=xxxxx&Signature=fwerurttiasixzcfsadfsaf

下载SDKcom.aliyun.oss aliyun-sdk-oss 3.15.0
用SDK生成签名URL
结果在浏览器里打开报SignatureDoesNotMatch错误

分析:
如果AK、AS、bucketName、objectKey、服务器时间任何一个出错都会报SignatureDoesNotMatch错误,但我们这里这个四个都没有问题,剩下的就是加密方式了。
oss默认签名算法是HMAC-SHA1,这个也没有问题。试了十几次还是报同样的错误,实在没辙。
第二天突然想到用oss工具生成url签名看看行不行?打开了oss工具填了AK、SK等信息后登录进去了,再次证明AK、AS、bucketName、endpoint没有问题,
然后随便找了一个文件,生成url签名,用浏览器打开是没有问题的,并且比对了工具与SDK生成的URL,没有什么差别,这时突然发现域名选择了自定义,而不是CNAME.
所以果断改了一下代码:
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
// 私有云要关闭CNAME
conf.setSupportCname(false);
OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret, conf);
问题成功解决。【重点提示】私有云一定要关闭 CNAME,才能正常认证通过!!!

1 个帖子 - 1 位参与者

阅读完整话题

来源: LinuxDo 最新话题查看原文