복붙노트

[RUBY-ON-RAILS] OpenSSL을 :: SSL에게 Heroku에 :: SSLError [중복]

RUBY-ON-RAILS

OpenSSL을 :: SSL에게 Heroku에 :: SSLError [중복]

나는, 페이스 북이나 트위터를 통해 사용자를 인증 그들의 정보를 기입에 도착하고 (따라서 사용자 레코드를 작성) 저장을 클릭하기 위해 노력하고있어. 그 마지막 단계 상에 OpenSSL이 오류를 받고 있어요 - 저장을 클릭 한 후. 유증 RegistrationsController 번호는 방법을 만들에 발생합니다.

내 레일 응용 프로그램에서이 오류를 받고 있어요 그래서, Heroku가에서 호스팅 :

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)

나는 솔루션의 많은 그들 작품의 없음을 보았다. 여기에 내가 시도한 몇 가지 있습니다 :

1) 인증 보석 설치

2) V2.30에 Heroku가 보석을 업그레이드 다시 밀어

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

이 인증서 파일이 실제로 존재하지 않는 수 하나 개의 문제처럼 보인다 - 나는 여러 장소에서 그것을 보았다, 그리고 그에게 Heroku에 대한 ca_cert 파일의 기본 경로처럼 보인다, 그러나 나는 틀릴 수 있었다.

이상한 일이지만, 이것은 이미 FB / 트위터를 통해 인증 한 후에 일어나고, 및 사용자 계정을 만들려고하고 있습니다. 왜 이런 일이있을 것이고, 어떻게이 문제를 디버깅 / 해결할 수 있습니까? 감사합니다 혼란.

업데이트 : 나는 이것을 Omniauth 이니셜로 라인, 그리고 지금 "작품"을 추가했다. 따라서 나는 문제가 Omniauth 함께 진단했습니다. 그러나, 나는이 분명 보안 격차를 단풍 ... 여전히 SSL 검증을하고 싶습니다.

OpenSSL을 :: SSL ::위한 verify_peer =에는 OpenSSL : SSL :: VERIFY_NONE

해결법

  1. ==============================

    1.여기에 몇 가지 검색 후 내가 찾은 것입니다 :

    여기에 몇 가지 검색 후 내가 찾은 것입니다 :

    HTTPS를, 예를 들면 통해 외부 서버에 열려있는 연결에 루비를 사용하는 경우. 페이스 북 그래프 API는 다음과 같은 오류로 실행할 수 있습니다 :

    OpenSSL::SSL::SSLError:SSL_connectreturned=1errno=0state=SSLv3readservercertificateB:certificateverifyfailed
    

    이 오류는 루비가 보안 웹 서버의 신뢰성을 확인하는 데 사용되는 인증 기관 인증서 (CA 인증서 표시를) 찾을 수 없다는이다. 이 솔루션은 응용 프로그램의 lib 디렉토리 / 디렉토리에이 CA-bundle.crt을 다운로드하는 것입니다 : 그런 다음, 다음 코드를 추가로 설정 / 초기화 / 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 = Rails.root.join('lib/ca-bundle.crt').to_s
          self.verify_mode = OpenSSL::SSL::VERIFY_PEER
          self.original_use_ssl = flag
        end
      end
    end
    

    이 응용 프로그램의 lib 디렉토리 / 디렉토리에서 CA 번들을 사용하는 루비 강제해야한다.

    http://jimneath.org/2011/10/19/ruby-ssl-certificate-verify-failed.html :에서 촬영

    최신 정보:

    당신은 당신의 시스템에 따라 = 대신 self.ca_file의 = self.ca_path를 사용해야 할 수도 있습니다.

  2. ==============================

    2.당신이 OmniAuth의 오른쪽에는 OpenSSL 구성을 가지고 것 같은데, 그러나 아마 당신의 CA 인증서에서 경로가 올바르지 않습니다?

    당신이 OmniAuth의 오른쪽에는 OpenSSL 구성을 가지고 것 같은데, 그러나 아마 당신의 CA 인증서에서 경로가 올바르지 않습니다?

    당신은 실행하여 Heroku가 서버에서 그것을 확인할 수 있습니다 :

    heroku run bash
    

    ... 그리고 적절한 경로를 표시하려면 openssl을 실행 :

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

    ... 당신은 $ OPENSSLDIR / 인증서 표시 / CA-certificates.crt에서 ca_certificates.crt 파일을 찾을 수 있어야

    그 경로 코드가 일치하는 업데이트를 확인합니다.

  3. from https://stackoverflow.com/questions/11703679/opensslsslsslerror-on-heroku by cc-by-sa and MIT license