Amazon s3 如何使用S3预签名URL指定服务器端加密?

Amazon s3 如何使用S3预签名URL指定服务器端加密?,amazon-s3,apex,pre-signed-url,Amazon S3,Apex,Pre Signed Url,这是一个S3问题,所以我在这里发布,而不是在Salesforce stackexchange中发布 基本上,我的Salesforce代码为S3生成预签名URL。前端使用这些文件来上载和下载文件 这是完美的工作。现在我们需要指定SSE(服务器端加密)。 根据文档,SSE-S3不适用于预签名URL 因此,我必须将SSE与客户生成的密钥一起使用。 这里的文字是这样说的: 创建预签名URL时,必须使用x-amz服务器端指定算法​-加密​-签名计算中的客户算法。 这就是我计算签名的方式,它可以很好地将

这是一个S3问题,所以我在这里发布,而不是在Salesforce stackexchange中发布

基本上,我的Salesforce代码为S3生成预签名URL。前端使用这些文件来上载和下载文件

这是完美的工作。现在我们需要指定SSE(服务器端加密)。 根据文档,SSE-S3不适用于预签名URL

因此,我必须将SSE与客户生成的密钥一起使用。

这里的文字是这样说的: 创建预签名URL时,必须使用x-amz服务器端指定算法​-加密​-签名计算中的客户算法。

这就是我计算签名的方式,它可以很好地将文件上传和下载到存储桶中,而无需加密

public string getStringToSign() {
        // ==== CONSTRUCT THE STRING TO SIGN ====
        string stringToSign = S3Connection.AWS_HEADER_ENCRYPTION_SCHEME + '\n'
            + this.dateStampISO + '\n'
            + this.dateStampYYYYMMDD + '/' + this.awsRegion + '/s3/aws4_request' + '\n'
            + EncodingUtil.convertToHex(Crypto.generateDigest(S3Connection.AWS_ENCRYPTION_SCHEME, blob.valueOf(this.getRequestString())));
        return stringToSign;
    }

    public blob getSigningKey() {
        // ==== GENERATE THE SIGNING KEY ====
        Blob dateKey = Crypto.generateMac('hmacSHA256', Blob.valueOf(this.dateStampYYYYMMDD), Blob.valueOf('AWS4' + this.accessSecret));
        Blob dateRegionKey = Crypto.generateMac('hmacSHA256', Blob.valueOf(this.awsRegion), dateKey);
        Blob dateRegionServiceKey = Crypto.generateMac('hmacSHA256', blob.valueOf(this.awsServiceName), dateRegionKey);
        Blob signingKey = Crypto.generateMac('hmacSHA256', blob.valueOf('aws4_request'), dateRegionServiceKey);
        //Blob signingKey2 = Crypto.generateMac('hmacSHA256', blob.valueOf('x-amz-server-side​-encryption​-customer-algorithm'), signingKey);
        return signingKey;
    }
    public string getSignature() {
        // ==== GENERATE THE SIGNATURE ====
        return this.generateSignature(this.getStringToSign(), this.getSigningKey());
    }

    public string generateSignature(string stringToSign, blob signingKey) {
        blob signatureBlob = Crypto.generateMac('hmacSHA256', blob.valueOf(stringToSign), signingKey);
        return EncodingUtil.convertToHex(signatureBlob);
    }
所以我的问题是如何添加“x-amz-server-side”​-加密​-此签名计算中的“客户算法”

提前谢谢