【问题标题】:How to use my signed-certificate to generate pre-signed URL to object at Amazon S3如何使用我的签名证书生成预签名 URL 以在 Amazon S3 上反对
【发布时间】:2020-09-23 08:15:48
【问题描述】:

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

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

非常感谢...

【问题讨论】:

    标签: javascript amazon-web-services amazon-s3 certificate self-signed


    【解决方案1】:

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

    【讨论】:

    • 没错。要将 https 与 S3 一起使用,您需要一个不带点的存储桶名称。要改用您自己的证书,您必须使用 Cloudfront 到前端 S3,或者您可以在 EC2 中部署反向代理或通过您的 Web 服务器将请求反向代理到 S3,这并不像最初看起来那样低效.
    【解决方案2】:

    在签名时明确指定区域

    当您获得 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

    无需删除存储桶名称中的点即可很好地工作。

    【讨论】:

      【解决方案3】:

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

      所以如果你之前有过以下调用:

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-10-18
        • 2018-12-27
        • 2012-03-24
        • 2017-07-21
        • 1970-01-01
        • 2017-02-15
        • 1970-01-01
        • 1970-01-01
        • 2019-04-18
        相关资源
        最近更新 更多