2013-08-20 107 views
19

Amazon S3不匹配,使用railsfog。 试图预编译我的资产rake assets:precompileAmazon S3 - 主机名与服务器证书(OpenSSL :: SSL :: SSLError)+ rails

消息:

[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的

我试过不已:

  1. 我已经尝试配置application.rb证书如下:没有成功。

    AWS.config(:http_handler => AWS :: HTTP :: HTTPartyHandler.new(:ssl_ca_path => “的/ etc/SSL /证书”))

  2. 也在Ubuntu 12.04安装opensslhere

的问题是: 如何亚马逊S3涉及证书

+0

没有SSL是否工作?你使用jruby吗? – archie

回答

-4

问题是与bucketnaming,在这种情况下:myproject.de,这是Amazon S3服务不认为有效的格式(名称中没有小数点)。

我把水桶的名字从myproject.de改为myprojectde,现在就可以使用了。

规则桶命名

在所有地区除美国标准区域水桶名称必须 遵守以下规则。这些导致符合DNS的 存储桶名称。

铲斗名称必须是至少3个,无长

铲斗名超过63个字符必须是一系列由 周期分隔的一个或多个标签,其中每个标签(。):

必须以小写字母或数字

必须以小写字母或数字结尾开始

可以包含小写字母,数字及破折号

桶名称不能被格式化为IP地址(例如, 192.168.5.4)

以下是有效的桶名称的例子:

myawsbucket

my.aws.bucket

myawsbucket。1

以下是无效的水桶名的例子:(。)

无效桶名称评论.myawsbucket桶名称不能以 开始时期。 myawsbucket。分类名称不能以句点(。)结尾。 my..examplebucket只能有标签

注之间的一个周期,如果你想访问使用虚拟托管式的请求一斗,例如http://mybucket.s3.amazonaws.com通过SSL,水桶名不能包含句号(。 )。

进一步引用here

+5

这是不正确的。存储桶名称myproject.de是一个有效的存储桶名称。 在某些情况下,存储桶名称必须包含句点(来自Amazon Docs http://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html):'在此步骤中,您将使用您的AWS账户凭据登录Amazon S3控制台,并创建以下两个存储桶:example.com&www.example.com' – Undistraction

22

其实你可以用一个水桶名称以一个点。您所要做的就是将: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" 
+3

谢谢,:path_style的工作方式就像一个魅力! –

+0

或在资产同步初始化程序中添加'Fog.credentials = {path_style:true}' –

10

TLDR;解决方案

为了通过HTTP 访问您的S3存储网址小号,你将需要:

  • 选择一个水桶名称,它不包含任何时期“.”和使用“Virtual Hosted–Style” URL,如
    https://simplebucketname.s3.amazonaws.com/myObjectKey
    OR
  • 使用的是单独指定斗名,主机名之后,例如 “Path Style” URL形式:
    https://s3.amazonaws.com/mybucket.mydomain.com/myObjectKey

随着fog,您可以设置该选项::path_style => truethis solution解释。

的问题&解释

的SSL证书验证问题来自使用点“.”在S3存储桶名称与“虚拟托管风格的方法” URL格式一起。

Amazon S3 Documentation指出,它允许两个主要的URL格式来访问S3桶和对象:

  1. Path Style Method
  2. Virtual Hosted–Style Method

所以发生了什么事是这样的:

  1. 雾正试图请求一个URL到你的buc KET,如:https://myproject.de.s3-us-west-2.amazonaws.com/foo/bar
  2. 在请求的主机名是myproject.de.s3-us-west-2.amazonaws.com
  3. SSL证书为*.amazonaws.net是SSL TLS协商
  4. 雾试图验证SSL证书& CA证书链
  5. 雾尝试匹配期间担任该证书的CN *.s3.amazonaws.commyproject.de.s3-us-west-2.amazonaws.com
  6. 根据RFC 2818Certificate CN wildcard matching rules,子子域名不匹配通配符CN:*.s3.amazonaws.com
  7. 连接失败,因为无效的SSL证书的CA验证

在S3 URL问题的点被提及,如在Drupal ProjectAWS ForumsPython Boto Libraryaround the internet,并在题为这篇博客是很好的解释hostname does not match the server certificateAmazon S3 Gotcha: Using Virtual Host URLs with HTTPS < - 我强烈建议阅读本文以进一步说明。

相关问题