8

我正在使用 Ubuntu 12.04LTS Desktop 开发 Shopify 应用程序(使用 shopify_app gem),在处理回调 URL 时遇到了这个问题。

Faraday::Error::ConnectionFailed (Connection reset by peer - SSL_connect)

查看此处和此处的 shopify-app-discuss 组,似乎问题出在 Ubuntu 12.04 及其 OpenSSL 上。我尝试安装最新的 OpenSSL,但没有。我发现的一种替代方法是使用 RVM 提供的另一种较旧的 OpenSSL。

$ rvm remove 1.9.3 (or whatever version of ruby you are using)
$ rvm pkg install openssl
$ rvm install 1.9.3 --with-openssl-dir=$rvm_path/usr

现在 Shopify 应用程序运行良好。它可以连接到 API。(这个技巧可能对其他 Ubuntu 12.04 用户有所帮助!)

所以,我的问题是:这是最好的解决方案吗?我有点担心较旧的 OpenSSL 版本。它可能存在一些安全问题。用这个开发应用程序安全吗?

当我部署应用程序(例如 Heroku)时,旧版 OpenSSL 是否会出现安全问题?

提前致谢!

4

4 回答 4

5

其他建议对我们不起作用。具体来说,我们需要强制:SSLv3而不是 :TLSv1. (对于现有的 Ubuntu 12.04.01 Ruby 1.9.3 和我们从乘客 PPM 中使用的那个。)

此外,需要检查是否@ssl_options已定义。我从 ActiveResource 实现中复制了一个。

我们把它放进去config/initializers/shopify_ssl.rb,一切都很美好:

require 'active_resource/connection'

class ActiveResource::Connection
  def apply_ssl_options_with_ssl_version(http)
    apply_ssl_options_without_ssl_version(http)
    return http unless defined?(@ssl_options)
    http.ssl_version = @ssl_options[:ssl_version] if @ssl_options[:ssl_version]
    http
  end
  alias_method_chain :apply_ssl_options, :ssl_version
end

ShopifyAPI::Base.ssl_options = { :ssl_version => :SSLv3 }
于 2012-11-01T18:49:34.293 回答
1

使用最新的 OpenSSL 库时,您的客户端很可能尝试使用 TLS 1.2 进行连接,这是 HTTPS 中使用的最新 SSL/TLS 协议之一。我们的负载平衡硬件在 TLS 1.2 中存在一个已知问题,尽管直到我自己独立偶然发现了这个错误,我们才意识到这一点。

我已经让运营团队的其他成员意识到了这一点,我希望我们会尽快解决这个问题。在此之前,您可以使用

http.ssl_version = :TLSv1

强制 Ruby 改为使用 TLS 1.0。

下面是一个如何将此解决方法应用于 ActiveResource 的示例,它是shopify_apigem 内部使用的 gem:

require 'active_resource/connection'

class ActiveResource::Connection
  def apply_ssl_options_with_ssl_version(http)
    apply_ssl_options_without_ssl_version(http)

    http.ssl_version = @ssl_options[:ssl_version] if @ssl_options[:ssl_version]

    http
  end

  alias_method_chain :apply_ssl_options, :ssl_version
end

现在你可以使用

ShopifyAPI::Base.ssl_options = {:ssl_version => :TLSv1}

解决这个问题。

于 2012-10-31T18:19:41.550 回答
1

尽管最新版本的 OpenSSL 是尚未发现的安全漏洞的完美结合,但我想说您应该使用在特定时刻为您工作的库。没有没有安全漏洞的软件,除非您可以影响服务器端升级到与最新 SSL 版本兼容的东西,否则您的选择是有限的。

于 2012-08-08T11:57:30.950 回答
0

您应始终使用最新版本的 OpenSSL。

于 2012-08-08T11:53:51.793 回答