<?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>234234asdXxxsddd</RequestId>
<HostId>oss-cn.XXXX.com</HostId>
<OSSAccessKeyId>qwertyu</OSSAccessKeyId>
<SignatureProvided>bbbbbxxxcccc=</SignatureProvided>
<StringToSign>GET
Tue, 21 May 2024 02:55:36 GMT
/</StringToSign>
<StringToSignBytes>47 45 54 0A 0A 0A 54 75 65 2C 20 32 31 20 4D 61 79 20 32 30 32 34 20 30 32 3A 35 35 3A 33 36 20 47 4D 54 0A 2F </StringToSignBytes>
</Error>
背景:
在做本地使用OSS官网提供分片上传文件的SDK时,报错签名不一致错误
排查步骤:
创建签名的方法:
OSSClient ossClient = new OSSClient(endPoint, accessKeyId, accessKeySecret);
1.验证创建签名的参数
endPoint:主要 私有云跟公有云的地址是不一样的,不要存疑,对 就是你看到的那个地址(可以 ping下你的地址,看能否访问通,是否要设置代理)
// 创建ClientConfiguration。ClientConfiguration是OSSClient的配置类,可配置代理、连接超时、最大连接数等参数。走代理
// ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
// conf.setProtocol(Protocol.HTTPS);
//
// //设置代理
// if (StringUtils.isNotBlank(proxyIp)) {
// conf.setProxyHost(proxyIp);
// conf.setProxyPort(proxyPort);
// }
accessKeyId、accessKeySecret 就找个阿里官网的oss Brower、ossUtils工具或者其它登录工具验证下就好
2. 验证下sdk包的版本
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
这里从3.6.0 一直测试到了3.17.0 发现 好像其实都差不多。没啥区别,当然也是检查的必要步骤
3. 极其隐蔽且关键的致命一击
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
// 私有云要关闭CNAME
conf.setSupportCname(true);
OSSClient ossClient = new OSSClient(endPoint, accessKeyId, accessKeySecret,conf);
CNAME(Canonical Name)记录,也被称为别名记录,用于将一个域名映射到另一个域名。私有云环境中使用CNAME是为了指向云服务提供的特定资源或服务,比如CDN加速、视频直播等。在某些情况下,可能需要关闭或修改CNAME记录,具体取决于您的配置要求和安全策略。以下是一些可能需要考虑的情况:
确保数据安全:在私有云中,为了确保数据的安全性,有时需要避免数据通过公共互联网传输。这时,您可能会选择不使用CNAME记录,从而避免数据外泄风险。
避免冲突:如果您的私有云环境使用了内部DNS解析系统,那么外部的CNAME设置可能会与之发生冲突,因此需要关闭外部CNAME记录。
简化管理:在某些组织中,为了简化内部网络管理和减少维护成本,可能会选择关闭CNAME记录,并直接使用IP地址进行内部资源的访问。
此外,在一些场景下,如CDN加速、视频直播等,通常需要正确配置CNAME记录以指向云服务分配的地址,从而实现加速效果和服务的正常运作。因此,在这些情况下应保持CNAME记录的正确配置。
总的来说,是否需要关闭CNAME记录取决于具体的应用场景和您的网络安全及管理需求。
4.求救
实在解决不了的话,记住你是上帝,花了钱的上帝。提工单给阿里云官网就对了