一、报错信息
com.aliyun.oss.OSSException: The request signature we calculated does not match the signature you provided. Check your key and signing method.
[ErrorCode]: SignatureDoesNotMatch
[RequestId]: 5D67AA13E6******FCFC9CFF13
[HostId]: oss******.cn
[ResponseError]:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
<RequestId>5D67AA13E6******FCFC9CFF13</RequestId>
<HostId>oss******.cn</HostId>
<OSSAccessKeyId>********</OSSAccessKeyId>
<SignatureProvided>********</SignatureProvided>
<StringToSign>POST
application/octet-stream
Thu, 29 Aug 2019 10:36:43 GMT
/jtjyspcc/private/SYSTEM/345288c8b58449b4afbf2258e0fa1e0a?uploads</StringToSign>
<StringToSignBytes>50 4F 53 54 64 73 </StringToSignBytes>
</Error>
二、错误分析
一、基础配置检查
-----------------------------------------------------------------------------------------
1、确保你当前操作的电脑可以ping通endPoint
公有云是互联网都能访问,但是私有云是内网才可以访问的,所以,确保你的网络能通;
如果网络不通时,抛出的异常是 Unknown Host,也是比较容易排查
2、确保你的AK(AccessKeyId)是正确且启用的
因为AK是可以被禁用,被删除的
如果是失效或者禁用删除了,提示信息是 invalid key
3、确保你的AS(AccessKeySecret)是正确的
如果失败,一般是 SignatureDoesNotMatch
4、检查配置文件前后是否带了空格
5、检查 endpoint前面是否带上了 bucket (正确的是不带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版本试着更新一下
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.5.0</version>
</dependency>
2、如果是私有云的环境 <--------!!!!! 重!点 !!!!!----------->
私有云一定要关闭 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、工单结束后,删除工单,可以把相关的私密信息都删除,不用担心泄密
三、欢迎大家积极评论,谢谢