繁体   English   中英

如何使用我的签名证书生成预签名 URL 以在 Amazon S3 上提出异议

[英]How to use my signed-certificate to generate pre-signed URL to object at Amazon S3

我想为存储在 Amazon S3 中的对象生成安全的预签名 url。 在我通过传递资源密钥和存储桶名称在 Java SDK 中调用generatePresignedUrl函数后,它返回一个 URL,其格式类似于https://{bucketname}.amazonaws.com{key}?AWSAccessKeyId=AKIAJ2ZNsY7UUIH7XMQA&Expires=1510834637&Signature=mkRSZBMdf4kAqCQr%2FMLQ2BMMI86Q%3D

XMLHttpRequest正在通过 JavaScript 代码访问返回的 URL。 我正在对我的 URL 执行简单的 GET 请求, ERR_INSECURE_RESPONSE在 Web 浏览器中收到错误ERR_INSECURE_RESPONSE 原因是数据传输中使用的证书是用户签名的证书,这意味着未经证书颁发机构验证,这就是浏览器拒绝获取资源的原因。 我想在 Amazon S3 的资源访问中使用我的签名证书来防止出现此错误。 如何指示 Amazon S3 使用我的证书而不是继续使用 Amazon 的不安全的用户签名证书?

不胜感激...

我发现了错误。 这是因为我的存储桶名称包含点,因此浏览器将其识别为不同的域,并且没有验证 Amazon 颁发的安全证书。

在预签名期间明确指定区域

当您获得 URL 预签名时,您可以使用许多不同的 URL(更不用说 URL 的 HTTP 和 HTTPS 变体)。

请注意,我特意选择了一个带点的存储桶名称: bucket.name

如果你去aws s3 presign s3://bucket.name/object你得到

https://s3.amazonaws.com/bucket.name/object?AWSAccessKeyId=xxxxx&Signature=xxxxx&Expires=1543942893

这会将您重定向到

https://bucket.name.s3.amazonaws.com/object?AWSAccessKeyId=xxxxx&Signature=xxxxx&Expires=1543942893

如前所述,存储桶名称中的点将使默认证书无效。

但是,当您明确指定aws s3 presign --region=eu-west-1 s3://bucket.name/object您会得到:

https://s3.eu-west-1.amazonaws.com/bucket.name/object?AWSAccessKeyId=xxxxx&Signature=xxxxx&Expires=1543943326

无需您删除存储桶名称中的点即可正常工作。

根据 Yves 的回答,您可以通过指定一个空存储桶并将存储桶与对象键连接起来,使用 JAVA SDK 生成与 SSL 配合使用的预签名 URL。

因此,如果您之前有以下电话:

s3Client.generatePresignedUrl(<bucket>, <key>, <expiration>)

您可以通过调用以下方式获得有效且 SSL 友好的 url:

s3Client.generatePresignedUrl("", <bucket> + "/" + <key>, <expiration>)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM