Javascript 如何使用我的签名证书为AmazonS3上的对象生成预签名URL
我想为存储在AmazonS3中的对象生成安全的预签名url。在我通过传递资源密钥和bucket名称调用Java SDK中的Javascript 如何使用我的签名证书为AmazonS3上的对象生成预签名URL,javascript,amazon-web-services,amazon-s3,certificate,self-signed,Javascript,Amazon Web Services,Amazon S3,Certificate,Self Signed,我想为存储在AmazonS3中的对象生成安全的预签名url。在我通过传递资源密钥和bucket名称调用Java SDK中的generatePressignedUrl函数后,它返回一个URL,其格式类似于https://{bucketname}.amazonaws.com{key}?AWSAccessKeyId=akiaj2znsysy7uuih7xmqa&Expires=1510834637&Signature=mkrszbmf4kaqr%2fmlqmimi86q%3D 返回的URL由XMLHt
generatePressignedUrl
函数后,它返回一个URL,其格式类似于https://{bucketname}.amazonaws.com{key}?AWSAccessKeyId=akiaj2znsysy7uuih7xmqa&Expires=1510834637&Signature=mkrszbmf4kaqr%2fmlqmimi86q%3D
返回的URL由XMLHttpRequest
通过JavaScript代码访问。我正在对我的URL执行简单的GET请求,并在web浏览器中获得错误ERR\u unsecure\u响应
。原因是数据传输中使用的证书是用户签名的证书,这意味着未经证书颁发机构验证,所以这就是浏览器拒绝获取资源的原因。我想在AmazonS3的资源访问中使用我的签名证书来防止出现这个错误。如何指示Amazon S3使用我的证书,而不是继续使用Amazon的不安全用户签名证书
非常感谢……我发现了错误。这是因为我的bucket名称包含点,并且因为浏览器将其识别为不同的域,并且没有验证Amazon颁发的安全证书。在预签名期间明确指定区域 当您获得URL预签名时,可以使用许多不同的URL(更不用说URL的HTTP和HTTPS变体) 注意,我故意选择了一个带点的bucket名称:
bucket.name
如果您转到aws s3,请预先设计s3://bucket.name/object,您将得到
这会将您重定向到
如上所述,bucket名称中的点将使默认证书无效
但是,当您显式地指定区域时,如aws s3 presign--region=eu-west-1 s3://bucket.name/object
所示,您会得到:
它工作得很好,无需删除bucket名称中的点。根据Yves的回答,您可以通过指定一个空bucket并将bucket与对象键连接,生成使用JAVA SDK与SSL一起工作的预签名URL 因此,如果您以前接到过以下电话:
s3Client.generatePresignedUrl(,)
您可以通过调用以下命令获得有效且SSL友好的url:
s3Client.generatePresignedUrl(“,+”/“+,”)
没错。要在S3中使用https,需要一个不带点的bucket名称。要使用您自己的证书,您必须使用Cloudfront到前端S3,或者您可以在EC2中部署反向代理,或者通过web服务器将请求反向代理到S3,这并不像最初看起来的那么低效。