Linux Shopify+;Ubuntu 12.04LTS+;法拉第问题=可以使用较旧的OpenSSL吗?

Linux Shopify+;Ubuntu 12.04LTS+;法拉第问题=可以使用较旧的OpenSSL吗?,linux,oauth,openssl,shopify,ubuntu-12.04,Linux,Oauth,Openssl,Shopify,Ubuntu 12.04,我正在使用Ubuntu12.04LTS桌面开发Shopify应用程序(使用Shopify_应用程序gem),在处理回调URL时遇到了这个问题 Faraday::Error::ConnectionFailed (Connection reset by peer - SSL_connect) 看看shopify应用程序讨论组,这里的问题似乎是Ubuntu 12.04及其OpenSSL。 我试图安装最新的OpenSSL,但什么也没安装。我的另一个选择是使用不同的、较旧的OpenSSL,这是RVM提供

我正在使用Ubuntu12.04LTS桌面开发Shopify应用程序(使用Shopify_应用程序gem),在处理回调URL时遇到了这个问题

Faraday::Error::ConnectionFailed (Connection reset by peer - SSL_connect)
看看shopify应用程序讨论组,这里的问题似乎是Ubuntu 12.04及其OpenSSL。 我试图安装最新的OpenSSL,但什么也没安装。我的另一个选择是使用不同的、较旧的OpenSSL,这是RVM提供的

$ 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是否会出现安全问题


提前谢谢

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

虽然最新版本的OpenSSL是尚未发现的安全漏洞的神圣结合,但我认为您应该使用在特定时刻适用的库。没有没有没有安全漏洞的软件,除非您能够影响服务器端升级到与最新SSL版本兼容的软件,否则您的选择恐怕是有限的。

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

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

http.ssl\u版本=:TLSv1

强制Ruby改用TLS1.0

下面是一个如何将此解决方案应用于ActiveResource的示例,
shopify\u api
gem在内部使用的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
现在你可以使用

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


解决这个问题。

其他建议对我们不起作用。具体来说,我们需要强制执行
:SSLv3
,而不是
:TLSv1
。(对于Ubuntu12.04.01 Ruby 1.9.3和我们从乘客PPM中使用的股票。)

此外,还需要检查是否定义了
@ssl\u选项。我从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 }

RVM附带的OpenSSL版本是什么?谢谢,这为我解决了这个问题@InternetSeriousBusiness-我刚刚安装的OpenSSL版本是0.9.8抱歉,说得太早了。现在我得到了这个SSL错误:SSL\u connect返回=1 errno=0 state=SSLv3读取服务器证书B:证书验证失败此操作。我也无法使用:TLSv1获得其他建议。这个解决方案在Ubuntu 12.04和Ruby 1.9.3上对我很有效。谢谢!!:)