2012-06-29 10 views
8

私はShopify Appを開発するためにUbuntu 12.04LTS Desktopを使用しています(shopify_app gemを使用しています)、コールバックURLを処理するときにこの問題に遭遇しました。Shopify + Ubuntu 12.04LTS +ファラデー問題=古いOpenSSLを使用できますか?

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

を見るとグループhereをshopifyアプリ-議論し、ここで、問題はUbuntuの12.04とそのOpenSSLのであるようです。 最新のOpenSSLをインストールしようとしましたが、何もインストールしませんでした。 1つの選択肢として、foundは、別の古い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にセキュリティ上の問題があるのでしょうか?

ありがとうございます!

+0

とにかく、RVMが付属していたOpenSSLのバージョンは何ですか? – InternetSeriousBusiness

+0

ありがとう、これは私の問題を解決しました。 @InternetSeriousBusiness - 私がインストールしたばかりのOpenSSLのバージョンは0.9.8でした。 – ndbroadbent

+0

申し訳ありませんが、あまりにも早く話しました。今私はこのSSLエラーを取得しています:SSL_connect返された= 1 errno = 0状態= SSLv3サーバー証明書を読み取るB:証明書の検証に失敗しました – ndbroadbent

答えて

1

OpenSSLの最新バージョンは、未だ発見されていないセキュリティホールの神聖な婚姻ですが、私はあなたがその特定の瞬間にあなたのために働くライブラリを使うべきだと言いたいと思います。セキュリティホールのないソフトウェアはありません。サーバ側で最新のSSLバージョンと互換性のあるものにアップグレードすることができない限り、あなたの選択肢は限られています。

1

最新のOpenSSLライブラリを使用している場合、クライアントはHTTPSで使用されている最新のSSL/TLSプロトコルの1つであるTLS 1.2を使用して接続しようとしている可能性が非常に高いです。ロードバランシングハードウェアには、TLS 1.2の既知の問題がありますが、私自身がこのバグに遭遇するまでは気づいていませんでした。

私はオペレーションチームにこれを認識させました。できるだけ早く修正する予定です。それまでは、あなたの代わりにTLS 1.0を使用するようにルビーを強制的に

http.ssl_version = :TLSv1

を使用することができます。ここで

は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}

を使用することができます。

5

他の提案は私たちのためには機能しませんでした。具体的には、:TLSv1の代わりに:SSLv3を強制する必要がありました。 (Ubuntu 12.04.01 Ruby 1.9.3とPassenger PPMで使用しているものの両方)

また、@ssl_optionsが定義されていることを確認する必要があります。私はActiveResource実装から1つをコピーしました。

我々は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 } 
+0

これは動作します。私は他の提案を使用することができませんでした:どちらかのTLSv1作業。このソリューションは、Ubuntu 12.04とRuby 1.9.3で私の仕事をしてくれました。ありがとう!! :) –

+0

あなたは、英雄です。この岬を受け入れてください。 –

関連する問題