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)
私はたくさんの解決策を見てきましたが、どれもうまくいきません。ここに私が試したいくつかのことがあります:
certified
1) 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