web-dev-qa-db-ja.com

OpenSSL :: SSL :: SSLErrorを取り除く方法

OmniAuthを使用してFacebookでユーザーを認証しようとしています。最初は動作していましたが、途中で動作を停止し、次のエラーメッセージが表示され始めました。

OpenSSL :: SSL :: SSLError SSL_connect return = 1 errno = 0 state = SSLv3 read server certificate B:証明書の検証に失敗しました

同じコードがTwitterでもうまく機能し、Facebookで機能しない理由を理解できないようです。私はオンラインで助けを求めましたが、成功していません。

これは私が構築しているウェブサイトへのリンクです: http://www.bestizz.com/
このURLはエラーメッセージを表示します。 http://www.bestizz.com/auth/facebook

31
Eugene

Rubyはルート証明書を見つけることができません。 デバッグを目的としたオプションがあります。スクリプトの先頭に次のコードを配置します。

   require 'openssl'
   OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
20
RAJ

次のコードをconfig/initializers/fix_ssl.rbに追加します

require 'open-uri'
require 'net/https'

module Net
  class HTTP
    alias_method :original_use_ssl=, :use_ssl=

    def use_ssl=(flag)
      self.ca_file = "/etc/pki/tls/certs/ca-bundle.crt"  # for Centos/Redhat
      self.verify_mode = OpenSSL::SSL::VERIFY_PEER
      self.original_use_ssl = flag
    end
  end
end

注意:

多くのオペレーティングシステムには、既に証明書バンドルが付属しています。たとえば、Red Hat Enterprise LinuxおよびCentOSでは、次の場所にインストールされます。

/etc/pki/tls/certs/ca-bundle.crt

Ubuntuの場合:

/etc/ssl/certs/ca-certificates.crt
8
Amal Kumar S

Yosemiteで実行中のRubyを更新した後、Googleで認証しようとしているときに同じ問題に直面しました。

これに続いて:https://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.htmlは私の問題を解決したようです。

歴史のために引用します:

そのため、rvm-installed Rubyは証明書の間違ったディレクトリを検索しますが、OSX-Rubyは正しいディレクトリを検索します。この場合はOSXシステムディレクトリです。

したがって、rvm-installed Rubyが問題です。

Githubに関するこの議論は最終的に解決策を提供しました:何らかの理由でRVMには、Rubyのプリコンパイルされたバージョンが付属しています。

あなたがしたいのは、プリコンパイルされたルビーを使用せずに、Rubyのようにローカルマシンでコンパイルします:rvm install 2.2.0 --disable-binary

最後に、私は実行する必要がありました:

rvm uninstall Ruby-2.2.4
rvm install Ruby-2.2.4 --disable-binary
gem pristine --all

お役に立てれば

7
rpbaltazar

FacebookでSSL検証が失敗しているようです。私はOpenSSLマスターではありませんが、これでうまくいくと思います。

OmniAuthの最新バージョン(> = 0.2.2、私はあなたであると仮定)とFaraday> = 0.6.1(スタックトレースはあなたであると言う)のバージョンを使用していると仮定すると、場所を渡すことができますCA証明書バンドルのそれに応じて、FacebookのOmniAuth設定を変更します。

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, 'appid', 'appsecret', {:scope => 'publish_stream,email', :client_options => {:ssl => {:ca_path => '/etc/ssl/certs'}}}
  # other providers...
end

'/etc/ssl/certs'バンドルへのパス。必要な場合は、 このファイル が有効であると考えています。それをどこかに配置し、必要なアクセス許可を与え、アプリにそれを向けるだけです。

詳細な手順については、 this SO answer のAlex Kremerに感謝します。

6
Michelle Tilley

このリンクは機能するはずです。 https://Gist.github.com/fnichol/86755 指示に従ってください。 Railsインストーラーをダウンロードし、2つのコマンドライン関数を実行する必要があります。

1
JohnOsborne

これを行うと、これはopensslで証明書エラーに乗ります

Sudo curl http://curl.haxx.se/ca/cacert.pem -o /opt/local/etc/openssl/cert.pem
0
Raymond Gao

私がやったばかりのい回避策は、Net :: HTTPのクラスをオーバーライドし、SSL証明書を検証しないように指示する変数を設定することです。

    require 'net/http'
    require 'openssl'

    class Net::HTTP   alias_method :origConnect, :connect
        def connect
          @ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
          origConnect
        end
    end

Net :: HTTPを呼び出すgemを呼び出すgemを呼び出すgemのソースコードをいじりたくないため、このようにしました。本当に戻って、代わりに個別のcacert.pemファイルを見るためにナッジする方法を理解する必要があります。サーバーのcacert.pemファイルを変更することはできません。変更しないと、それが最適なルートになります。

0
JBB