2013-08-20 121 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 < - 我強烈建議閱讀本文以進一步說明。

相關問題