一、报错信息


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、工单结束后,删除工单,可以把相关的私密信息都删除,不用担心泄密

三、欢迎大家积极评论,谢谢

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐