OSS报SignatureDoesNotMatch错误,特别注意公有云和私有云环境不同!
一、基础配置检查
1、确保你当前操作的电脑可以ping通endPoint
公有云是互联网都能访问,但是私有云是内网才可以访问的,所以,确保你的网络能通;
如果网络不通时,抛出的异常是 Unknown Host,也是比较容易排查
2、确保你的AK(AccessKeyId)是正确且启用的
因为AK是可以被禁用,被删除的
如果是失效或者禁用删除了,提示信息是 invalid key
3、确保你的AS(AccessKeySecret)是正确的
如果失败,一般是 SignatureDoesNotMatch
4、检查配置文件前后是否带了空格
5、检查 endpoint前面是否带上了 bucket (正确的是不带bucket,错误示例: b u c k e t . {bucket}. bucket.{endpoint} )
二、如果以上基础信息都配置正确,可以去OSS官网下载ossUtils工具验证一下
1、官网工具下载:https://help.aliyun.com/document_detail/120075.html?spm=a2c4g.11186623.6.696.124933aanP6Ubd
2、参考官网资料,下载并配置Endpoint AK AS 信息,最后一个StsToken可以不用设置
3、下载之后,启动,并输入一些基础命令检查
ls 命令查看所有的bucket信息
ls oss://bucketName 命令查看指定的bucketName的信息
4、如果正常输出结果,则表明基础配置信息都是正确的;反之,重新检查,排除法,一步步来
三、经过验证之后,基础信息是正常的,但是还是抛出签名认证失败问题:SignatureDoesNotMatch
1、OSS SDK版本试着更新一下
com.aliyun.oss aliyun-sdk-oss 3.5.02、如果是私有云的环境 <--------!!! 重!点 !!!----------->
私有云一定要关闭 CNAME,才能正常认证通过!!!
(我就是卡在这里,磨了大半天,被人提及才知道,奇怪的是网上对于这一点的知识几乎没有,所以格外注意了)
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
// 私有云要关闭CNAME
conf.setSupportCname(false);
OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret, conf);
四、终极办法:只能求助OSS售后工程师了
1、在OSS官网,提交工单,把问题描述详细,提交等待
2、一般在一个小时内可以收到回复,建议可以debug时,同步进行
3、可以加急处理
4、工单结束后,删除工单,可以把相关的私密信息都删除,不用担心泄密