首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保文件在从亚马逊S3下载之前使用SSE-C加密?

如何确保文件在从亚马逊S3下载之前使用SSE-C加密?
EN

Stack Overflow用户
提问于 2016-11-18 15:48:06
回答 2查看 898关注 0票数 2

我正在使用Amazon aws Java SDK进行编码。

我使用SSE-C(服务器端加密,使用客户提供的密钥)上传了几个本地文件到S3,也有一些文件没有使用任何加密。在下载其他模块中的文件之前,我需要确保该特定文件是否已加密。我已经引用了这个link。但此过程适用于使用SSE (与SSE-C不同)加密的文件。在参考了Amazon aws Java API之后,我编写了以下代码。

代码语言:javascript
复制
Base64 b = new Base64();
byte[] keyBytes = b.decode("encryptionKey");
SecretKey key = new SecretKeySpec(keyBytes,0,keyBytes.length,"AES");
SSECustomerKey sseKey = new SSECustomerKey(key);

GetObjectMetadataRequest request2 =new GetObjectMetadataRequest("bucketname","keyname").withSSECustomerKey(sseKey);
ObjectMetadata metadata = s3client.getObjectMetadata(request2);
System.out.println("Encryption algorithm used: " + metadata.getSSECustomerAlgorithm());

上面的代码可以很好地下载加密文件。但在下载未加密的文件时会出现异常。

有没有通用的API来获取加密和非加密文件的元数据?

EN

回答 2

Stack Overflow用户

发布于 2016-11-18 16:07:11

您可以在之前运行检查,如果getSSECustomerKey返回null,您就知道它还没有加密,如下所示

代码语言:javascript
复制
GetObjectMetadataRequest request2 = new GetObjectMetadataRequest("bucketname","keyname");
ObjectMetadata metadata = s3client.getObjectMetadata(request2);

if (metadata.getSSEAlgorithm() == null) {
    // download files directly - it is not encrypted
} else {
    // files encrypted - add the SSE key
}

另一种选择是检查异常并处理异常中未加密文件的下载,检查文件是否存在并进行下载。

票数 1
EN

Stack Overflow用户

发布于 2016-11-21 07:21:57

使用SSE-C时的一般指导原则是单独存储S3对象和所使用的加密密钥(而不是密钥本身)之间的映射。这个映射可以存储在数据库中(RDS、Dynamo,甚至SimpleDB)。或者甚至可以在S3中:在.../metadata/<object>这样的路径中存储一个包含密钥ID或"NONE“的文件,并在尝试获取实际文件之前读取该文件。

这样做的一个原因是为了支持多个客户密钥。由于密钥轮换策略,您可能需要逐步从一个密钥转换到另一个密钥,或者决定为每个客户使用不同的密钥。这样,您的应用程序就可以支持这些场景中的任何一种。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40671843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档