Amazon S3 - 主机名与服务器证书(OpenSSL :: SSL :: SSLError)+ rails不匹配

时间:2013-08-20 16:42:18

标签: ruby-on-rails amazon-s3

Amazon S3,使用railsfog。 尝试使用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有一些东西

我已经尝试过了:

  1. 我已经尝试过这样的application.rb配置证书:没有成功。

    AWS.config(:http_handler => AWS :: Http :: HTTPartyHandler.new(:ssl_ca_path =>“/ etc / ssl / certs”))

  2. 还从here

  3. 在Ubuntu 12.04上安装了openssl

    问题是: Amazon S3如何处理证书

3 个答案:

答案 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)

TLDR;溶液

要通过http S 访问S3存储桶网址,您需要:

  • 选择一个存储桶名称,使其不包含句点' .'并使用" Virtual Hosted–Style"网址,例如
    https://simplebucketname.s3.amazonaws.com/myObjectKey
    OR
  • 使用" Path Style" URL表单,在主机名后单独指定存储桶名称,例如:
    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存储桶和对象:

  1. Path Style Method
  2. Virtual Hosted–Style Method
  3. 所以发生了什么:

    1. Fog正在尝试向您的广告管理系统请求网址,例如:https://myproject.de.s3-us-west-2.amazonaws.com/foo/bar
    2. 请求中的主机名为myproject.de.s3-us-west-2.amazonaws.com
    3. 在SSL TLS协商期间提供*.amazonaws.net的SSL证书
    4. Fog尝试验证SSL Cert& CA Cert Chain
    5. Fog尝试将Cert的*.s3.amazonaws.commyproject.de.s3-us-west-2.amazonaws.com
    6. 相匹配
    7. 根据Certificate CN wildcard matching rules中的RFC 2818,子子域与通配符CN不匹配:*.s3.amazonaws.com
    8. 由于无效的SSL证书CA验证
    9. ,连接失败并显示hostname does not match the server certificate

      S3网址问题中的点提及around the internet,例如Drupal ProjectAWS ForumsPython 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