我使用Ubuntu桌面12.04LTS开发Shopify应用程序(使用shopify_app宝石),以及处理回调URL时,我就遇到了这个问题。
Faraday::Error::ConnectionFailed (Connection reset by peer - SSL_connect)
纵观shopify-APP-讨论小组在这里 ,在这里,似乎这个问题是与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的?
提前致谢!
其他建议并没有为我们工作。 具体来说,我们需要给力:SSLv3
代替:TLSv1
。 (对于这两个股票的Ubuntu 12.04.01红宝石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 }
虽然OpenSSL的最新版本是尚未发现的安全漏洞的一个神圣的婚姻殿堂,我会说,你应该使用在该特定时刻为你工作的图书馆。 有没有安全漏洞没有软件,除非你可以影响服务器端升级到最新的与SSL版本恐怕你的选择是有限的兼容东西。
当使用最新的OpenSSL库,你的客户是最有可能尝试使用TLS 1.2,在HTTPS使用的更近的SSL / TLS协议中的一个连接。 我们的负载平衡硬件与TLS 1.2一个已知的问题,虽然我们不知道它,直到我在独立这个错误绊倒自己。
我做了运营团队的其他成员认识到这一点,我希望我们会尽快解决这个。 在那之前,你可以使用
http.ssl_version = :TLSv1
迫使红宝石使用TLS 1.0来代替。
下面是如何将这个解决方法应用到的ActiveResource,那创业板为例shopify_api
宝石内部使用:
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}
要解决此问题。