2013-08-20 3 views
19

Amazon S3, используя rails и fog. Пытаясь прекомпилировать мои активы rake assets:precompile:Amazon S3 - имя хоста не соответствует сертификату сервера (OpenSSL :: SSL :: SSLError) + рельсы

сообщение:

[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 => АМС :: HTTP :: HTTPartyHandler.new (: ssl_ca_path => "/ и т.д./SSL/сертификаты"))

  2. также установлены openssl на Ubuntu 12.04 из here

Вопрос: Как Amazon S3 сделки с сертификатами

+0

Работает ли без SSL? Вы используете jruby? – archie

ответ

-4

проблема с naming из bucket, в данном случае: myproject.de, который является форматом, который службы Amazon S3 не считают действительными (нет точки в названии).

Я изменил название ведра от myproject.de до myprojectde, и теперь он работает.

Правила Bucket Именование

Во всех регионах для стандартного США региона имя ведра должны соблюдать следующие правила, за исключением. Это приводит к согласованию с DNS .

имена ковшей должны быть по крайней мере 3 и не более 63 символов

Названия ковша должны быть серией из одной или нескольких меток, разделенных периода, где каждая метка (.):

Должна начинаться со строчной буквы или цифры

должен заканчиваться строчной буквы или цифры

Может содержать строчные буквы, цифры и дефис

имена ковшовые не должны быть отформатированы в качестве IP-адреса (например, 192.168.5.4)

Ниже приведены примеры допустимых имен ковшовые:

myawsbucket

my.aws.bucket

myawsbucket.1

Ниже приведены примеры недопустимых имен ковшей: (.) ​​

Invalid Bucket Имя Комментарий .myawsbucket Имя ковша не может начинаться с период. myawsbucket. Название ведра не может заканчиваться периодом (.). my..examplebucket Там может быть только один период между метками

Примечанием, если вы хотите получить доступ к ведру с помощью запроса виртуального прошли в стиле, например http://mybucket.s3.amazonaws.com через SSL, имя ведра не может включать в себя период (.).

далее ссылка here

+5

Неправильное использование. Имя bucket 'myproject.de' является допустимым именем ведра. В некоторых случаях имена ковша должны содержать периоды. (Из Amazon Docs http://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html): «На этом этапе , вы войдете в консоль Amazon S3 с учетными данными учетной записи AWS и создадите следующие два ведра: 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; Решение

Для того, чтобы получить доступ к своим S3 ведра адреса через HTTP S, вам нужно будет либо:

  • Выберите имя блока таким образом, что она содержит не периоды «.» и использовать «Virtual Hosted–Style» URL, такие как
    https://simplebucketname.s3.amazonaws.com/myObjectKey
    ИЛИ
  • Используйте «Path Style» формы URL, который задает имя блока отдельно, после того, как имя хоста, например:
    https://s3.amazonaws.com/mybucket.mydomain.com/myObjectKey

С fog, вы можете установить опцию: :path_style => true, как this solution объяснил.

Проблема & Объяснение

Проблема SSL Certificate Validation возникает с использованием точек '.' в S3 Bucket Название вместе с "Hosted-Style Метод виртуального" формат URL.

Amazon S3 Documentation утверждает, что она позволяет использовать два основных форматов URL для доступа к S3 Ведра и объекты:

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

Так что происходит это:

  1. Fog пытается запросить URL-адрес вашего buc кет, как: https://myproject.de.s3-us-west-2.amazonaws.com/foo/bar
  2. имя хоста в запросе myproject.de.s3-us-west-2.amazonaws.com
  3. SSL Cert для *.amazonaws.net подается во время SSL TLS Переговоров
  4. Туман пытается проверить SSL Cert & CA Cert Chain
  5. Туман пытается соответствовать Cert-х CN *.s3.amazonaws.commyproject.de.s3-us-west-2.amazonaws.com против
  6. Согласно Certificate CN wildcard matching rules в RFC 2818, суб-субдомен не соответствует шаблону CN: *.s3.amazonaws.com
  7. Соединение завершается с hostname does not match the server certificate из-за недопустимого сертификата SSL CA Validation

Точки в S3 проблемы URL упоминается around the internet, например, в Drupal Project, AWS Forums, Python Boto Library и очень хорошо объяснено в этом блоге под названием: Amazon S3 Gotcha: Using Virtual Host URLs with HTTPS < - Я настоятельно рекомендую прочитать это для дальнейшего уточнения.