9

Sto sviluppando app per rails con autorizzazione social. Facebook e Twitter account di accesso funziona bene, ma qualcosa di strano sta andando con Google ...Errore SSL Oauth di Google - SSL_connect restituito = 1 errno = 0 stato = certificato server di lettura SSLv3 B: verifica certificato non riuscita

mio inizializzatore per Google:

provider :google_oauth2, OAUTH_CONFIG[:google_api_key], OAUTH_CONFIG[:google_api_secret], { 
    :access_type => 'offline', 
    :prompt => 'consent', 
    :scope => 'userinfo.email, userinfo.profile, youtube.readonly' 
    } 

mio errore, che vedo quando click login con Google:

Faraday::Error::ConnectionFailed 
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed 
/Users/bmalets/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/net/http.rb:920:in `connect' 
/Users/bmalets/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/net/http.rb:920:in `block in connect' 
/Users/bmalets/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/timeout.rb:76:in `timeout' 
/Users/bmalets/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/net/http.rb:920:in `connect' 
/Users/bmalets/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/net/http.rb:863:in `do_start' 
/Users/bmalets/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/net/http.rb:852:in `start' 
/Users/bmalets/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/net/http.rb:1369:in `request' 
faraday (0.8.8) lib/faraday/adapter/net_http.rb:75:in `perform_request' 
faraday (0.8.8) lib/faraday/adapter/net_http.rb:38:in `call' 
faraday (0.8.8) lib/faraday/request/url_encoded.rb:14:in `call' 
faraday (0.8.8) lib/faraday/connection.rb:253:in `run_request' 
oauth2 (0.8.1) lib/oauth2/client.rb:88:in `request' 
oauth2 (0.8.1) lib/oauth2/client.rb:131:in `get_token' 
oauth2 (0.8.1) lib/oauth2/strategy/auth_code.rb:29:in `get_token' 

Cosa c'è di sbagliato con i certificati SSL? Per favore, aiuto

Nei risultati di ricerca di Google vedo molte risposte simili - aggiorna la libreria 'openssl', reinstalla ruby, rvm, aggiorna gemsets, bla-bla e molti altri ... Ho provato tutto, niente mi aiuta.

Ambiente: rotaie 4.1.6, Ruby 2.1.4, OS_X Yosemite

risposta

5

Un'altra risposta dice di disabilitare l'opzione VERIFY_PEER di OpenSSL, il che significa che l'app non sta convalidando il certificato e non è possibile verificare se ci si sta collegando a Google quando si effettuano le query. Questo è un enorme rischio per la sicurezza e non dovresti mai farlo.

C'è un problema sul repository GitHub per google-api-ruby-client (https://github.com/google/google-api-ruby-client/issues/253) per il problema che hai descritto. La soluzione attuale è quella di aggiungere questo alla vostra applicazione:

ENV['SSL_CERT_FILE'] = Gem.loaded_specs['google-api-client'].full_gem_path+'/lib/cacerts.pem' 

Per un'applicazione Rails, si dovrebbe aggiungere questo come una linea in config/application.rb.

+0

quando aggiungo la riga sopra al mio file di configurazione la mia app Rails il mio server locale non riesce ad avviarsi. Potete fornire ulteriori dettagli sull'implementazione? – tylerSF

+0

Suppongo che tu non abbia installato la gemma 'google-api-client' che fornisce il file del certificato che lo corregge, puoi anche puntare il tuo SSL_CERT_FILE in un diverso file cacerts.pem se non hai/voglio questa gemma I dettagli di implementazione e il motivo per cui è un problema che può essere risolto sono al problema del github, ho pensato che stavi usando questa gemma ma apparentemente non lo sei. – anothermh

6

aggiungo alla mia app inizializzare questo non bella picco:

if Rails.env.development? 
    OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 
end 

adesso Accedi opere in modalità di sviluppo.

+1

Funziona per me. Grazie bmalets – sushilprj