23

Facebook または Twitter を介してユーザーを認証し、情報を入力してから [保存] をクリックしようとしています (したがって、ユーザー レコードが作成されます)。保存をクリックした後、最後のステップで OpenSSL エラーが発生します。これは、Devise の RegistrationsController#create メソッドで発生します。

したがって、Heroku でホストされている Rails アプリケーションで次のエラーが発生します。

2012-07-28T18:25:13+00:00 app[web.1]: OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed)

私はたくさんの解決策を見てきましたが、どれもうまくいきません。ここに私が試したいくつかのことがあります:

certified1) gemのインストール

2) Heroku gem を v2.30 にアップグレードし、再度プッシュ

3) これ:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, TWITTER_KEY, TWITTER_SECRET, {:client_options => {:ssl => {:ca_file => "/usr/lib/ssl/certs/ca-certificates.crt"}}}
  provider :facebook, FACEBOOK_KEY, FACEBOOK_SECRET, {:scope => "publish_actions,user_location,email", :client_options => {:ssl => {:ca_file => "/usr/lib/ssl/certs/ca-certificates.crt"}}}
end

この証明書ファイルが実際には存在しないことが 1 つの問題のようです。いくつかの場所で見てきましたが、Heroku の ca_cert ファイルへのデフォルト パスのようですが、間違っている可能性があります。

奇妙なことに、これは、FB /Twitter で認証済みで、ユーザーのアカウントを作成しようとしているときに発生します。これはなぜですか?どうすればこれを解決/デバッグできますか? 心から混乱しています。

更新:この行を Omniauth 初期化子に追加したところ、「機能する」ようになりました。したがって、問題は Omniauth にあると診断しました。ただし、私はまだ SSL 検証を行いたいと考えています...これは明らかにセキュリティ ギャップを残します。

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

4

2 に答える 2

7

OmniAuthで適切なopenssl構成を使用しているようですが、CA証明書のパスが正しくない可能性がありますか?

次のコマンドを実行して、herokuサーバーでこれを確認できます。

heroku run bash

...次に、opensslを実行して、適切なパスを表示します。

$ openssl version -a
OpenSSL 1.0.0e 6 Sep 2011
OPENSSLDIR: "/usr/lib/ssl"

...ca_certificates.crtファイルは$OPENSSLDIR/ certs/ca-certificates.crtにあります。

そのパスが一致するようにコードを更新することを確認します。

于 2012-07-30T21:01:58.753 に答える