Jac*_*ius 5 ruby encryption aes amazon-s3 amazon-web-services
我正在尝试将文件上传到S3,并使用SSE-C加密选项对其进行加密。我可以不使用SSE-C选项进行上传,但是当我提供sse_customer_key选项时,出现以下错误:
ArgumentError:标头x-amz-server-side-encryption-customer-key具有字段值“ QkExM0JGRTNDMUUyRDRCQzA5NjAwNEQ2MjRBNkExMDYwQzBGQjcxODJDMjM0 \ nnMUE2MTNENDRCOTcxRjA2LFzFinclude /
我不确定问题出在我生成的密钥还是编码中。我在这里使用了不同的选项,但是AWS文档不是很清楚。在一般的SSE-C文档中,它说您需要提供x-amz-server-side?-encryption?-customer-key标头,其描述如下:
使用此标头为Amazon S3提供256位,base64编码的加密密钥,以用于加密或解密数据。
但是,如果我查看用于上传文件的Ruby SDK文档,则3个选项的描述稍有不同
(我没有复制错误,AWS文档实际上是这样写的)
因此,SDK文档使您似乎提供了原始的sse_customer_key,并且可以代表您对其进行base64编码(这对我来说很有意义)。
所以现在我正在建立这样的选项:
sse_customer_algorithm: :AES256,
sse_customer_key: sse_customer_key,
sse_customer_key_md5: Digest::MD5.hexdigest(sse_customer_key)
Run Code Online (Sandbox Code Playgroud)
我以前尝试这样做,Base64.encode64(sse_customer_key)
但这给了我一个不同的错误:
Aws :: S3 :: Errors :: InvalidArgument:密钥对于指定算法无效
我不确定我是错误生成密钥还是提供密钥不正确(或者是否完全是另一个问题)。
这就是我生成密钥的方式:
require "openssl"
OpenSSL::Cipher.new("AES-256-CBC").random_key
Run Code Online (Sandbox Code Playgroud)
哦,你注意到你的密钥包含“\n”吗?这很可能就是您收到 CR/LF 错误的原因:
QkExM0JGRTNDMUUyRDRCQzA5NjAwNEQ2MjRBNkExMDYwQzBGQjcxODJDMjM0(\n)nMUE2MTNENDRCOTcxRjA2Qzk1Mg=
正如同事在评论中提到的,strict_encode64是一个选项,因为它符合 RFC 2045。
顺便说一句,我从这里得到了这个见解:https ://bugs.ruby-lang.org/issues/14664
希望能帮助到你!:)
归档时间: |
|
查看次数: |
168 次 |
最近记录: |