Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用我的签名证书为AmazonS3上的对象生成预签名URL_Javascript_Amazon Web Services_Amazon S3_Certificate_Self Signed - Fatal编程技术网

Javascript 如何使用我的签名证书为AmazonS3上的对象生成预签名URL

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

我想为存储在AmazonS3中的对象生成安全的预签名url。在我通过传递资源密钥和bucket名称调用Java SDK中的
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,这并不像最初看起来的那么低效。