22

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. 也从这里安装openssl在 Ubuntu 12.04 上

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

4

3 回答 3

26

实际上,您可以使用带点的存储桶名称。您所要做的就是添加: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"
于 2014-01-06T16:12:09.547 回答
16

TLDR;解决方案

为了通过 http S访问您的 S3 存储桶 URL ,您需要:

  • 选择一个不包含句点 ' .' 的存储桶名称并使用“ Virtual Hosted–Style ” URL,例如
    https://simplebucketname.s3.amazonaws.com/myObjectKey
    OR
  • 在主机名之后使用单独指定存储桶名称的“路径样式”URL形式,例如:
    https://s3.amazonaws.com/mybucket.mydomain.com/myObjectKey

使用fog,您可以设置选项::path_style => true本解决方案所述。

问题与解释

SSL 证书验证问题源于.在 S3 存储桶名称中使用点“”以及“虚拟托管样式方法”URL 格式。

Amazon S3 文档声明它允许使用两种主要的 URL 格式来访问 S3 存储桶和对象:

  1. 路径样式方法(已弃用
  2. 虚拟托管式方法

所以发生的事情是这样的:

  1. Fog 正在尝试向您的存储桶请求 URL,例如:https://myproject.de.s3-us-west-2.amazonaws.com/foo/bar
  2. 请求中的主机名是myproject.de.s3-us-west-2.amazonaws.com
  3. *.amazonaws.net在 SSL TLS 协商期间提供SSL 证书
  4. Fog 尝试验证 SSL 证书和 CA 证书链
  5. Fog 尝试将 Cert 的 CN*.s3.amazonaws.commyproject.de.s3-us-west-2.amazonaws.com
  6. 根据RFC 2818中的证书 CN 通配符匹配规则,子域不匹配通配符 CN:*.s3.amazonaws.com
  7. hostname does not match the server certificate由于 SSL 证书 CA 验证无效,连接失败

S3 URL 问题中的点在Internet上都有提及,例如Drupal 项目AWS 论坛Python Boto 库,并且在这篇题为: Amazon S3 Gotcha: Using Virtual Host URLs with HTTPS <--我高度评价的博文中得到了很好的解释。建议阅读这篇文章以进一步澄清。

于 2015-04-03T23:23:39.057 回答
-4

问题在于namingof bucket,在本例中为 : myproject.de,这是 Amazon S3 服务认为无效的格式。(名称中没有点)。

我已将存储桶的名称从myproject.deinto更改为myprojectde现在可以使用。

存储桶命名规则

在除美国标准区域外的所有区域中,存储桶名称必须符合以下规则。这些会产生一个符合 DNS 的存储桶名称。

存储桶名称的长度必须至少为 3 且不超过 63 个字符

存储桶名称必须是由句点 (.) 分隔的一系列一个或多个标签,其中每个标签:

必须以小写字母或数字开头

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

可以包含小写字母、数字和破折号

存储桶名称不得格式化为 IP 地址(例如 192.168.5.4)

以下是有效存储桶名称的示例:

我的桶

我的.aws.bucket

myawsbucket.1

以下是无效存储桶名称的示例:

无效的存储桶名称注释 .myawsbucket 存储桶名称不能以句点 (.) 开头。我的桶。存储桶名称不能以句点 (.) 结尾。my..examplebucket 标签之间只能有一个句点

请注意,如果您要使用虚拟托管式请求访问存储桶,例如通过 SSL 的http://mybucket.s3.amazonaws.com,则存储桶名称不能包含句点 (.)。

进一步的参考在这里

于 2013-08-21T07:13:01.953 回答