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 にアクセスするには、次のいずれかが必要です。

を使用すると、オプションをfog設定できます:このソリューションが説明したように。:path_style => true

問題と解説

SSL 証明書の検証の問題は.、S3 バケット名に「Virtual Hosted–Style Method」URL 形式とともにドット「 」を使用すると発生します。

Amazon S3 ドキュメントには、S3 バケットとオブジェクトにアクセスするための 2 つの主要な URL 形式が許可されていると記載されています。

  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. SSL証明書*.amazonaws.netは、SSL TLSネゴシエーション中に提供されます
  4. Fog は SSL 証明書と CA 証明書チェーンを検証しようとします
  5. Fog は証明書の CN を照合しようと*.s3.amazonaws.comします。myproject.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 の問題のドットは、 Drupal ProjectAWS ForumsPython Boto Libraryなどのインターネットで言及されており、次のタイトルのブログ投稿で非常によく説明されています: Amazon S3 Gotcha: Using Virtual Host URLs with HTTPS <-さらに明確にするために、これを読むことをお勧めします。

于 2015-04-03T23:23:39.057 に答える
-4

問題はnamingof bucket、この場合は :myproject.deです。これは、Amazon S3 サービスが有効と見なさない形式です (名前にドットはありません)。

バケットの名前を から に変更しましたが、myproject.de現在は機能しmyprojectdeています。

バケットの命名規則

米国標準リージョンを除くすべてのリージョンで、バケット名は次のルールに準拠する必要があります。これらは、DNS 準拠のバケット名になります。

バケット名は 3 文字以上 63 文字以下にする必要があります

バケット名は、ピリオド (.) で区切られた一連の 1 つ以上のラベルである必要があります。各ラベルは次のとおりです。

小文字または数字で始める必要があります

小文字または数字で終わる必要があります

小文字、数字、およびダッシュを含めることができます

バケット名は IP アドレスとしてフォーマットしないでください (例: 192.168.5.4)

以下は、有効なバケット名の例です。

myawsbucket

my.aws.bucket

myawsbucket.1

以下は、無効なバケット名の例です。

無効なバケット名 コメント .myawsbucket バケット名をピリオド (.) で始めることはできません。myawsbucket。バケット名はピリオド (.) で終わることはできません。my..examplebucket ラベル間のピリオドは 1 つだけです

SSL 経由でhttp://mybucket.s3.amazonaws.comなどの仮想ホスト スタイルのリクエストを使用してバケットにアクセスする場合、バケット名にピリオド (.) を含めることはできません。

さらなる参照はここにあります

于 2013-08-21T07:13:01.953 に答える