Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails AWS S3禁用SSLv3支持_Ruby On Rails_Ssl_Heroku_Amazon S3_Fog - Fatal编程技术网

Ruby on rails AWS S3禁用SSLv3支持

Ruby on rails AWS S3禁用SSLv3支持,ruby-on-rails,ssl,heroku,amazon-s3,fog,Ruby On Rails,Ssl,Heroku,Amazon S3,Fog,我们收到了一封来自AWS的电子邮件,基本上说“S3正在禁用SSLv3支持,访问将在15天内被切断”。然后,他们列出了我们拥有的一些bucket(生产中的一个),它们“当前正在接受来自指定SSLv3的客户端的请求”。完整的电子邮件在这里,其他AWS用户似乎也收到了一封: 我的问题是我们如何测试这个场景,以及我们需要做什么来准备这个截止日期 我们使用Rails 4.1和Fog(~>1.28.0)以及right_aws(~>3.1.0)gems来访问aws,我们在Heroku上。我们的应用程序在UI

我们收到了一封来自AWS的电子邮件,基本上说“S3正在禁用SSLv3支持,访问将在15天内被切断”。然后,他们列出了我们拥有的一些bucket(生产中的一个),它们“当前正在接受来自指定SSLv3的客户端的请求”。完整的电子邮件在这里,其他AWS用户似乎也收到了一封:

我的问题是我们如何测试这个场景,以及我们需要做什么来准备这个截止日期

我们使用Rails 4.1和Fog(~>1.28.0)以及right_aws(~>3.1.0)gems来访问aws,我们在Heroku上。我们的应用程序在UI中为浏览器用户提供指向S3资源的签名HTTPS链接


这只是一个客户端(浏览器)问题还是我们需要更好地理解和测试/修复的问题?

如果客户端(例如浏览器)通过https发出请求所使用的协议是SSLv3,那么ssl握手将不会成功,这些请求将失败,这完全是客户端问题。因此,客户端需要禁用SSLv3


AWS的行动是对去年发现的POODLE漏洞的后续行动,从那时起,所有使用*.CloudFront.net域名的AWS CloudFront发行版都已更新,不再支持SSLv3。现在AWS正转向S3以实现同样的功能。

fog使用excon进行http(s)传输。excon是一个低级的纯rubyhttp客户端,它依赖于rubyopenssl绑定来工作。虽然可以显式设置要使用的ssl版本,但excon没有,据我所知,这意味着它会与服务器协商选择使用什么(因此,如果服务器要求不使用SSLv3,它应该合作)

我相信这意味着这里不需要采取任何行动,但是Ruby和OpenSSL版本之间的细节有点不同(更不用说,反思/理解这些绑定的细节有点困难),所以很难说清楚。excon确实支持ssl_version参数,如果确实出现问题,可以使用该参数强制特定版本(这不是一个好的常规选择,因为它不允许协商,并且ruby版本之间的细节有所不同)


希望能有所帮助。

截止日期已被移动:

根据收到的反馈,我们将停止支持SSLv3以确保与S3存储桶的连接的截止日期延长至2015年5月20日凌晨12:00


2015年5月7日IST上午11:26更新

在carrierwave初始值设定项中,如下所示:

CarrierWave.configure do |config|
  config.fog_credentials = {
      :provider               => 'AWS',       # required
      :aws_access_key_id      => Settings.carrier_wave.amazon_s3.access_key,       # required
      :aws_secret_access_key  => Settings.carrier_wave.amazon_s3.secret_key,       # required
      :region                 => 'external-1'  # optional, defaults to 'us-east-1'
  }
  config.fog_directory  = Settings.carrier_wave.amazon_s3.bucket                    # required
  #config.fog_host       = 'http://aws.amazon.com/s3/'            # optional, defaults to nil
  config.fog_public     = false                                   # optional, defaults to true
  config.fog_authenticated_url_expiration = 600
  config.fog_attributes = {ssl_version: :TLSv1_2} #{'Cache-Control'=>'max-age=315576000'}  # optional, defaults to {}
end
这对我很有用,看看wireshark跟踪日志

1577    22.611358000    192.168.0.113   8.8.8.8 DNS 87  Standard query 0xffd8  A s3-external-1.amazonaws.com
1578    22.611398000    192.168.0.113   8.8.8.8 DNS 87  Standard query 0xbf2f  AAAA s3-external-1.amazonaws.com
1580    22.731084000    8.8.8.8 192.168.0.113   DNS 103 Standard query response 0xffd8  A 54.231.1.234
1586    22.849595000    54.231.10.34    192.168.0.113   TLSv1.2 107 Encrypted Alert

1594    23.012866000    192.168.0.113   54.231.1.234    TLSv1.2 347 Client Hello
1607    23.310950000    192.168.0.113   54.231.1.234    TLSv1.2 204 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
1608    23.578966000    54.231.1.234    192.168.0.113   TLSv1.2 129 Change Cipher Spec, Encrypted Handshake Message
1609    23.579480000    192.168.0.113   54.231.1.234    TLSv1.2 427 Application Data
1610    23.868725000    54.231.1.234    192.168.0.113   TLSv1.2 299 Application Data
14  2.012094000 192.168.0.115   54.231.32.0 SSLv3   192 Client Hello 
17  2.242423000 54.231.32.0 192.168.0.115   SSLv3   61  Alert (Level:  Fatal, Description: Handshake Failure)

2015年5月6日IST下午6点至53点更新

好的,在更新excongem之后,我们可以看到服务器和S3服务器之间的
TLSv1.2
协议

bundle更新excon

Wireshark跟踪日志语句

29  1.989230000 192.168.0.115   54.231.32.0 SSL 336 Client Hello
34  2.215461000 54.231.32.0 192.168.0.115   TLSv1.2 1494    Server Hello
40  2.219301000 54.231.32.0 192.168.0.115   TLSv1.2 471 Certificate
42  2.222127000 192.168.0.115   54.231.32.0 TLSv1.2 204 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message

2015年5月6日IST下午4-29时更新

更新主机文件后,以下是wireshark跟踪日志

1577    22.611358000    192.168.0.113   8.8.8.8 DNS 87  Standard query 0xffd8  A s3-external-1.amazonaws.com
1578    22.611398000    192.168.0.113   8.8.8.8 DNS 87  Standard query 0xbf2f  AAAA s3-external-1.amazonaws.com
1580    22.731084000    8.8.8.8 192.168.0.113   DNS 103 Standard query response 0xffd8  A 54.231.1.234
1586    22.849595000    54.231.10.34    192.168.0.113   TLSv1.2 107 Encrypted Alert

1594    23.012866000    192.168.0.113   54.231.1.234    TLSv1.2 347 Client Hello
1607    23.310950000    192.168.0.113   54.231.1.234    TLSv1.2 204 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
1608    23.578966000    54.231.1.234    192.168.0.113   TLSv1.2 129 Change Cipher Spec, Encrypted Handshake Message
1609    23.579480000    192.168.0.113   54.231.1.234    TLSv1.2 427 Application Data
1610    23.868725000    54.231.1.234    192.168.0.113   TLSv1.2 299 Application Data
14  2.012094000 192.168.0.115   54.231.32.0 SSLv3   192 Client Hello 
17  2.242423000 54.231.32.0 192.168.0.115   SSLv3   61  Alert (Level:  Fatal, Description: Handshake Failure)

当我从S3上的本地开发rails上传文件时,请参阅上面的wireshark请求捕获。如图所示,在初始握手时,Amazon服务器使用SSLv3,因此我的rails服务器使用SSLv3发送所有未来的请求

现在的问题是,如何更改bucket设置,使其仅使用TLS接受/启动流程?我已经在亚马逊的设置中进行了检查,没有类似的设置

我已经将我的nginx更改为使用TLS,但我认为这是不必要的,因为Rails将在后台使用Excon与S3进行对话,如上面的评论所述

因此,请建议在5月20日之前测试这一点的最佳方法,以确保它不会在当天破裂

任何帮助都会很好

仅供参考-我的bucket名称类似于xyz.abc.com,因此没有-在名称中。

AWS的官方常见问题解答

54.231.32.0 s3.amazonaws.com
54.231.32.1.s3.amazonaws.com
54.231.32.3.s3-external-1.amazonaws.com
/etc/hosts
中配置上述内容,将
替换为bucket名称

注意:当与非
us-east-1
bucket一起使用时,您可能会得到重定向和故障响应。这与他们的测试基础设施有关,而不是其他任何东西。所以忽略这一点

创建一个“标准美国桶”,并用它进行测试。请记住将应用程序配置为使用s3区域
external-1


FWIW,我的应用程序使用ruby 2.1.4上的
回形针(4.2.0)
工作正常。

我能够在我的fog配置中使用以下设置强制TLS:

连接选项:{ssl_版本::TLSv1_2}

要进行测试,请更新主机文件(AWS提供的说明):


我能够成功地连接。此外,如果将设置更改为:SSLv3,则会出现错误。祝你好运

我的理解是,这完全是一个浏览器问题,这从本质上切断了对IE7以下浏览器的支持。我希望能够在他们切断生产数据之前运行一些测试,希望我们能尽快找到更多信息。感谢回复。是的,我们怀疑这只是因为浏览器贬值,这是有道理的。我们和你一样担心的是,我们错过了一些东西,我们真的想在任何死亡日期之前测试这个场景。到目前为止,AWS支持没有说什么,所以如果很快没有结果,我们将不得不尝试premium支持:感谢您的回复,这很有帮助。除了浏览器客户端,我们的服务器也与S3通信(通过fog和right_aws gems),那么我想我们想要了解和测试的是这些“客户端”。这就需要更多关于如何在截止日期之前设置的信息。我知道这是一种OT,因为问题是关于Fog gem的,但这是否意味着,如果我们使用FactoryGirl,那么只要用户的浏览器使用TLS,这真的无关紧要