IBM Cloud Docs
通过客户提供的密钥进行服务器端加密 (SSE-C)

通过客户提供的密钥进行服务器端加密 (SSE-C)

SSE-C 会在对象上强制实施。 如果请求是使用客户管理的密钥来对对象或其元数据执行读取或写入操作,那么请求会将必需的加密信息作为 HTTP 请求中的头发送。 语法与 S3 API 相同,支持 SSE-C 的与 S3 兼容的库会按预期对 IBM Cloud® Object Storage 工作。

使用 SSE-C 头的任何请求都必须使用 SSL 进行发送。 响应头中的 ETag不是对象的 MD5 散列,而是随机生成的 32 字节的十六进制字符串。

典型的 PUT 对象 请求可以使用以下头:

类型 描述
x-amz-server-side-encryption-customer-algorithm 字符串 此头用于指定要与 x-amz-server-side-encryption-customer-key 头中存储的加密密钥配合使用的算法和密钥大小。 此值必须设置为字符串 AES256
x-amz-server-side-encryption-customer-key 字符串 此头用于传输在服务器端加密过程中所使用 AES 256 位密钥的 Base64 编码的字节字符串表示。
x-amz-server-side-encryption-customer-key-MD5 字符串 此头用于传输符合 RFC 1321 的加密密钥的 Base64 编码的 128 位 MD5 摘要。 对象存储使用此值来验证在 x-amz-server-side-encryption-customer-key 中传递的密钥在传输和编码过程中是否未损坏。 必须在对密钥进行 Base64 编码之前,先对密钥计算摘要。

cURL 命令 可能如下所示:

curl -v -T $FILE https://$ENDPOINT/$BUCKET  \
   -H "Authorization: bearer $TOKEN" \
   -H "Content-MD5: $MD5_OBJECT_HASH" \
   -H "x-amz-server-side-encryption-customer-algorithm: AES256" \
   -H "x-amz-server-side-encryption-customer-key:$ENCRYPTION_KEY" \
   -H "x-amz-server-side-encryption-customer-key-MD5:$MD5_KEY_HASH"