Amazon S3 - имя хоста не совпадает с сертификатом сервера (OpenSSL:: SSL:: SSLError) + рельсы
Amazon S3
, используя rails
и fog
.
Попытка прекомпилировать мои ресурсы с помощью 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
Я уже пробовал:
-
Я уже пытался настроить сертификаты в application.rb
следующим образом: без успеха.
AWS.config(: http_handler = > AWS:: Http: HTTPartyHandler.new(: ssl_ca_path = > "/etc/ssl/certs" ))
-
также установил openssl
на Ubuntu 12.04 из здесь
Вопрос:
Как Amazon S3 имеет дело с сертификатами
Ответы
Ответ 1
На самом деле вы можете использовать имя ведра с точкой. Все, что вам нужно сделать, это добавить :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"
Ответ 2
TL;DR; Решение
Чтобы получить доступ к вашим URL-адресам S3 с помощью http S, вам необходимо либо:
- Выберите имя ведра, чтобы оно не содержало периодов "
.
" и использовало URL Virtual Hosted Style, как
https://simplebucketname.s3.amazonaws.com/myObjectKey
ИЛИ
- Используйте Path Style "URL-форму, которая определяет имя ведра отдельно, после имени хоста, например:
https://s3.amazonaws.com/mybucket.mydomain.com/myObjectKey
С помощью fog
вы можете установить параметр: :path_style => true
в качестве данного решения.
Проблема и пояснение
Проблема проверки SSL-сертификата возникает из-за использования точек .
'в имени байта S3 вместе с форматом URL-адреса "Метод виртуального хоста".
Документация Amazon S3 утверждает, что он позволяет использовать два основных формата URL для доступа к кодам и объектам S3:
Итак, что происходит:
- Fog пытается запросить URL-адрес вашего ведра, например:
https://myproject.de.s3-us-west-2.amazonaws.com/foo/bar
- Имя хоста в запросе
myproject.de.s3-us-west-2.amazonaws.com
- Сертификат SSL для
*.amazonaws.net
предоставляется во время переговоров по SSL TLS
- Fog пытается проверить сертификаты сертификатов SSL и CA
- Туман пытается сопоставить Cert CN
*.s3.amazonaws.com
с myproject.de.s3-us-west-2.amazonaws.com
- В соответствии с Правилами сопоставления шаблонов сертификата CN в RFC 2818, -subdomain не соответствует групповому символу CN:
*.s3.amazonaws.com
- Не удалось выполнить соединение с
hostname does not match the server certificate
из-за неверной проверки сертификата CA Certification
Точки в проблеме URL-адреса S3 упоминаются в Интернете, например, в Drupal Project, Форумы AWS, Python Boto Library и очень хорошо объясняется в этом сообщении в блоге: Amazon S3 Gotcha: использование URL-адресов виртуальных хостов с HTTPS < - Я настоятельно рекомендую прочитать это для дальнейшего уточнения.
Ответ 3
Проблема заключается в naming
of bucket
, в данном случае: myproject.de
, который является форматом, который службы Amazon S3 не считают действительными (нет точки в имени).
Я изменил имя ведра с myproject.de
на myprojectde
, и теперь он работает.
Правила для присвоения имен в буклете
Во всех регионах, кроме региона стандартного стандарта США, имя ведра должно соблюдать следующие правила. Это приводит к совместимости с DNS имя ковша.
Названия ковша должны быть не менее 3 и не более 63 символов
Имя байта должно быть серией из одной или нескольких меток, разделенных период (.), где каждая метка:
Необходимо начинать с строчной буквы или числа
Должен заканчиваться строчной буквой или числом
Может содержать строчные буквы, цифры и тире
Имена bucket не должны быть отформатированы как IP-адрес (например, 192.168.5.4)
Ниже приведены примеры допустимых имен ведра:
myawsbucket
my.aws.bucket
myawsbucket.1
Ниже приведены примеры недопустимых имен ведра:
Недопустимое имя элемента в виде ведра .myawsbucket Имя ведра не может начинаться с Период (.). myawsbucket. Название ведра не может заканчиваться периодом (.). my..examplebucket Между метками может быть только один период
Обратите внимание, что если вы хотите получить доступ к ведру с помощью запроса виртуального хостинга, например http://mybucket.s3.amazonaws.com через SSL, имя ведра не может включают период (.).
дополнительная ссылка здесь