Amazon S3
,使用rails
和fog
。
尝试使用rake assets:precompile
预先编译资产:
[WARNING] fog: followed redirect to myproject.de.s3-us-west-2.amazonaws.com, connecting to the matching region will be more performant
rake aborted!
hostname does not match the server certificate (OpenSSL::SSL::SSLError)
所以OpenSSL有一些东西
我已经尝试过了:
我已经尝试过这样的application.rb
配置证书:没有成功。
AWS.config(:http_handler => AWS :: Http :: HTTPartyHandler.new(:ssl_ca_path =>“/ etc / ssl / certs”))
还从here
openssl
醇>
问题是: Amazon S3如何处理证书
答案 0 :(得分:24)
实际上,您可以使用带点的存储桶名称。您所要做的就是将:path_style => true
添加到config.fog_credentials
。
在你的例子中,它会给出:
config.fog_credentials = {
:provider => 'AWS',
:aws_access_key_id => ENV['S3_KEY'],
:aws_secret_access_key => ENV['S3_SECRET'],
:region => ENV['S3_REGION'],
:path_style => true
}
config.fog_directory = "myproject.de"
答案 1 :(得分:12)
要通过http S 访问S3存储桶网址,您需要:
.
'并使用" Virtual Hosted–Style"网址,例如https://simplebucketname.s3.amazonaws.com/myObjectKey
https://s3.amazonaws.com/mybucket.mydomain.com/myObjectKey
使用fog
,您可以设置选项::path_style => true
,解释为this solution。
SSL证书验证问题源于使用点' .
'在S3 Bucket Name中以及" Virtual Hosted-Style Method"网址格式。
Amazon S3 Documentation表示它允许两种主要的URL格式来访问S3存储桶和对象:
所以发生了什么:
https://myproject.de.s3-us-west-2.amazonaws.com/foo/bar
myproject.de.s3-us-west-2.amazonaws.com
*.amazonaws.net
的SSL证书*.s3.amazonaws.com
与myproject.de.s3-us-west-2.amazonaws.com
*.s3.amazonaws.com
hostname does not match the server certificate
醇>
S3网址问题中的点提及around the internet,例如Drupal Project,AWS Forums,Python Boto Library,并在此博客文章中详细说明:{{ 3}}< - 我强烈建议您阅读此内容以进一步说明。
答案 2 :(得分:-4)
问题在于naming
bucket
,在这种情况下:myproject.de
,这是Amazon S3服务不认为有效的格式。(名称中没有点)。
我已将存储桶的名称从myproject.de
更改为myprojectde
,现在可以正常使用。
存储桶命名规则
在除美国标准区域以外的所有地区,必须使用存储桶名称 遵守以下规则。这些导致符合DNS 桶名。
存储桶名称必须至少为3且不超过63个字符
存储桶名称必须是由a分隔的一系列一个或多个标签 句点(。),每个标签:
必须以小写字母或数字
开头必须以小写字母或数字
结尾可以包含小写字母,数字和短划线
不得将存储桶名称格式化为IP地址(例如, 192.168.5.4)
以下是有效存储桶名称的示例:
myawsbucket
my.aws.bucket
myawsbucket.1
以下是无效存储桶名称的示例:
无效的存储桶名称注释.myawsbucket存储桶名称无法启动 一段时间 (。)。 myawsbucket。存储桶名称不能以句点(。)结尾。 my..examplebucket标签之间只能有一个句点
注意,如果要使用虚拟托管样式请求访问存储桶,例如通过SSL http://mybucket.s3.amazonaws.com,则存储桶名称不能包含句点(。)。
进一步参考是here