SSL_connect restituito = 1 errno = 0 stato = certificato server di lettura SSLv3 B: verifica certificato non riuscita

Sto usando Authlogic-Connect per accessi di terze parti. Dopo aver eseguito le migrazioni appropriate, gli accessi a Twitter / Google / yahoo sembrano funzionare correttamente ma l’accesso a Facebook genera un’eccezione:

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed 

Il registro dev mostra

 OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed): app/controllers/users_controller.rb:37:in `update' 

Si prega di suggerire ..

Mi sono imbattuto in un problema simile quando provavo ad usare il generatore JQuery per Rails 3

L’ho risolto così:

  1. Ottieni il pacchetto CURL Certificate Authority (CA). Puoi farlo con:

    • sudo port install curl-ca-bundle [se usi MacPorts]
    • o semplicemente wget http://curl.haxx.se/ca/cacert.pem direttamente wget http://curl.haxx.se/ca/cacert.pem
  2. Esegui il codice ruby ​​che sta tentando di verificare la certificazione SSL: SSL_CERT_FILE=/opt/local/etc/certs/cacert.pem rails generate jquery:install . Nel tuo caso, vuoi impostarlo come una variabile di ambiente da qualche parte il server lo preleva o aggiungere qualcosa come ENV['SSL_CERT_FILE'] = /path/to/your/new/cacert.pem nel tuo file environment.rb.

Puoi anche installare i file CA (non l’ho provato) sul sistema operativo – ci sono lunghe istruzioni qui – questo dovrebbe funzionare in modo simile, ma non l’ho provato personalmente.

In sostanza, il problema che si sta verificando è che alcuni servizi Web rispondono con un certificato firmato contro una CA che OpenSSL non è in grado di verificare.

Se stai usando RVM su OS X, probabilmente devi eseguire questo:

 rvm osx-ssl-certs update all 

Maggiori informazioni qui: http://rvm.io/support/fixing-broken-ssl-certificates

Ed ecco la spiegazione completa: https://github.com/wayneeseguegu/rvm/blob/master/help/osx-ssl-certs.md


Aggiornare

Su Ruby 2.2, potrebbe essere necessario reinstallare Ruby dal sorgente per risolvere questo problema. Ecco come (sostituisci 2.2.3 con la tua versione di Ruby):

 rvm reinstall 2.2.3 --disable-binary 

Credito a https://stackoverflow.com/a/32363597/4353 e Ian Connor .

Ecco come puoi risolverlo su Windows: https://gist.github.com/867550 (creato da Fletcher Nichol)

Estratto:

The Manual Way (Boring)

Scarica il file cacert.pem da http://curl.haxx.se/ca/cacert.pem . Salva questo file in C:\RailsInstaller\cacert.pem .

Ora rendi Ruby consapevole del tuo pacchetto di autorità di certificazione impostando SSL_CERT_FILE . Per impostare questo nella tua attuale sessione del prompt dei comandi, digita:

 set SSL_CERT_FILE=C:\RailsInstaller\cacert.pem 

Per rendere questa un’impostazione permanente, aggiungila nel tuo pannello di controllo .

Ruby non riesce a trovare certificati radice affidabili.

Dai un’occhiata a questo post del blog per una soluzione: ” Ruby 1.9 e l’errore SSL “.

La soluzione è installare la porta curl-ca-bundle che contiene gli stessi certificati di root usati da Firefox:

 sudo port install curl-ca-bundle 

e dì al tuo object https di usarlo:

 https.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt' 

Nota che se vuoi che il tuo codice funzioni su Ubuntu, devi invece impostare l’attributo ca_path , con il percorso dei certificati di default /etc/ssl/certs .

Il motivo per cui ottieni questo errore su OSX è il ruby ​​installato da rvm.

Se ti imbatti in questo problema su OSX puoi trovare una spiegazione molto ampia in questo post del blog:

http://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html

La versione breve è che, per alcune versioni di Ruby, RVM scarica i binari pre-compilati, che cercano i certificati nella posizione sbagliata. Forzando RVM per scaricare l’origine e compilare sul proprio computer, si garantisce che la configurazione per il percorso del certificato sia corretta.

Il comando per fare questo è:

 rvm install 2.2.0 --disable-binary 

se hai già la versione in questione, puoi reinstallarla con:

 rvm reinstall 2.2.0 --disable-binary 

(ovviamente, sostituisci la tua versione ruby secondo necessità).

Il problema è che Ruby non riesce a trovare un certificato di root di cui fidarsi. A partire dal 1.9 ruby controlla questo. Dovrai assicurarti di avere il certificato di arricciatura sul tuo sistema sotto forma di un file pem. Dovrai anche assicurarti che il certificato sia nella posizione in cui Ruby si aspetta che sia. Puoi ottenere questo certificato a …

 http://curl.haxx.se/ca/cacert.pem 

Se sei un utente RVM e OSX, la posizione del file del certificato varia in base alla versione di ruby ​​utilizzata. Impostazione esplicita del percorso con: ca_path è un’idea BAD in quanto il codice non sarà trasferibile al momento della produzione. Lì per te vuoi fornire ruby ​​con un certificato nella posizione predefinita (e presumere che i tuoi sviluppatori sappiano cosa stanno facendo). È ansible usare dtruss per capire dove il sistema sta cercando il file del certificato.

Nel mio caso il sistema stava cercando il file cert in

 /Users/stewart.matheson/.rvm/usr/ssl/cert.pem 

tuttavia il sistema MACOSX si aspetterebbe un certificato in

 /System/Library/OpenSSL/cert.pem 

Ho copiato il certificato scaricato su questo percorso e ha funzionato. HTH

La nuova gem certificata è progettata per risolvere questo problema:

https://github.com/stevegraham/certified

Su Mac OS X Lion con l’ultimo Macport:

 sudo port install curl-ca-bundle export SSL_CERT_FILE=/opt/local/share/curl/curl-ca-bundle.crt 

Quindi, rieseguire il lavoro fallito.

Nota, il percorso del file cert sembra essere cambiato da quando Eric G ha risposto il 12 maggio.

Aggiungi gem ‘certified’ nel tuo gemfile ed esegui l’installazione di bundle.

  1. gem ‘ certificata
  2. installazione bundle

Un solo liner lo corregge per Windows in un prompt di amministrazione

choco install wget (prima vedi chocolatey.org )

 wget http://curl.haxx.se/ca/cacert.pem -OC:\cacert.pem && setx /M SSL_CERT_FILE "C:\cacert.pem" 

O semplicemente fai questo:

 gem sources -r https://rubygems.org/ gem sources -a http://rubygems.org/ 

Metodo di Milanio:

 gem sources -r https://rubygems.org gem sources -a http://rubygems.org gem update --system gem sources -r http://rubygems.org gem sources -a https://rubygems.org gem install [NAME_OF_GEM] 

Beh, questo ha funzionato per me

 rvm pkg install openssl rvm reinstall 1.9.2 --with-openssl-dir=$rvm_path/usr 

Qualcosa non va nell’implementazione openssl di mia ubuntu 12.04

Ho provato a installare curl-ca-bundle con brew , ma il pacchetto non è più disponibile:

 $ brew install curl-ca-bundle Error: No available formula for curl-ca-bundle Searching formulae... Searching taps... 

La soluzione che ha funzionato su Mac è stata:

  $ cd /usr/local/etc/openssl/certs/ $ sudo curl -O http://curl.haxx.se/ca/cacert.pem 

Aggiungi questa linea nel tuo ~/.bash_profile (o ~/.zshrc per zsh):

 export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cacert.pem 

Quindi aggiorna il tuo terminale:

 $ source ~/.bash_profile 

Ecco un’altra opzione per scopi di debug.

Assicurati di non utilizzarlo mai in nessun ambiente di produzione, poiché in primo luogo annullerà i vantaggi dell’utilizzo di SSL. È sempre e solo valido farlo nel tuo ambiente di sviluppo locale.

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

Pur sapendo che è piuttosto una soluzione zoppa, sto ancora condividendo questo perché sembra che poche persone che rispondono qui usano Windows , e penso che alcuni utenti di Windows (me incluso) apprezzerebbero un approccio semplice e intuitivo.

 require 'openssl' puts OpenSSL::X509::DEFAULT_CERT_FILE 

Questo indica dove il tuo openssl sta cercando il file cert. Il mio nome non è Luis, ma il mio era C:/Users/Luis/Code/luislavena/knap-build/var/knapsack/software/x86-windows/openssl/1.0.0l/ssl/cert.pem . Il percorso può essere diverso a seconda dei singoli ambienti (ad es. openknapsack invece di luislavena ).

Il percorso non è cambiato anche dopo aver set SSL_CERT_FILE=C:\foo\bar\baz\cert.pem tramite la console, quindi … Ho creato la directory C:\Users\Luis\Code\luislavena\knap-build\var\knapsack\software\x86-windows\openssl\1.0.0l\ssl nel mio disco locale e inserisco un file cert.

Zoppo com’è, funzionerà sicuramente.

Ho avuto questo stesso problema mentre lavoravo su un progetto Ruby. Sto usando Windows 7 a 64 bit.

Ho risolto questo problema:

  1. Download del file cacert.pem da http://curl.haxx.se/ca/cacert.pem .
  2. Salvato quel file in C: /RubyCertificates/cacert.pem
  3. Quindi imposta la variabile ambientale “SSL_CERT_FILE” su “C: \ RubyCertificates \ cacert.pem”

fonte: https://gist.github.com/fnichol/867550

La risposta più semplice che ha funzionato per me è stata questa

 sudo apt-get install openssl ca-certificates 

E voilà !!!

OS X 10.8.x con Homebrew:

 brew install curl-ca-bundle brew list curl-ca-bundle cp /usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt /usr/local/etc/openssl/cert.pem 

Quindi, come suggerisce questo post sul blog,

” Come curare la rete: il comportamento HTTPS predefinito Risky di HTTP ”

potresti voler installare la gem always_verify_ssl_certificates che ti consente di impostare un valore predefinito per ca_file .

Questo ha funzionato per me. Se usi rvm e brew:

 rvm remove 1.9.3 brew install openssl rvm install 1.9.3 --with-openssl-dir=`brew --prefix openssl` 

Mi sono imbattuto in questo problema e la correzione suggerita di rvm osx-ssl-certs update all non ha funzionato nonostante io sia un utente RVM su OSX.

La correzione che ha funzionato per me è stata la reinstallazione dell’ultima versione di openssl:

 brew update brew remove openssl brew install openssl 

Ho risolto questo problema eseguendo questo nel terminale. La piena scrittura è disponibile qui

 rvm install 2.2.0 --disable-binary 

Soluzione OSX:

installa l’ultima versione stabile di rvm

 rvm get stable 

usa il comando rvm per risolvere automaticamente i certificati

 rvm osx-ssl-certs update all 

Ecco cosa ho fatto che mi ha aiutato se hai un problema specifico su Leopard.

Il mio cert era vecchio e doveva essere aggiornato. Ho scaricato questo:

http://curl.haxx.se/ca/cacert.pem

Quindi sostituito il mio certificato che è stato trovato qui su Leopard:

 /usr/share/curl/curl-ca-bundle.crt 

Ricarica qualsiasi cosa tu stia accedendo e dovresti essere bravo!

Solo perché le istruzioni erano leggermente diverse per quello che ha funzionato per me, ho pensato di aggiungere i miei 2 centesimi:

Sono su OS X Lion e uso macports e rvm

Ho installato curl-ca-bundle:

 sudo port install curl-ca-bundle 

Quindi ho regolato la mia configurazione di omniauth per essere questa:

 Rails.application.config.middleware.use OmniAuth::Builder do provider :google_oauth2, APP_CONFIG['CONSUMER_KEY'], APP_CONFIG['CONSUMER_SECRET'], :scope => 'https://www.google.com/m8/feeds https://www.googleapis.com/auth/userinfo.profile', :ssl => {:ca_path => "/share/curl/curl-ca-bundle.crt"} end 

Se hai un link simbolico in / usr / local / etc / openssl che punta a cert.pem prova a fare questo:

 ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE" (should be /usr/local/etc/openssl) cd /usr/local/etc/openssl wget http://curl.haxx.se/ca/cacert.pem ln -s cacert.pem 77ee3751.0 (77ee3751.0 is my symbolic link, should depend on the openssl version) 

Se stai eseguendo localmente l’app per rail, aggiungi questa riga nella parte inferiore di application.rb.

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

Dopo questo è ansible utilizzare l’app senza problemi. Puoi chiamarlo un hack ma non è raccomandato. Utilizzare solo quando è necessario eseguire localmente

Ho avuto problemi per un certo numero di giorni e sono stato hackerato. Questo collegamento si è rivelato estremamente utile per me. Mi ha aiutato a eseguire con successo l’aggiornamento di SSL su MAC OS X 9.

Aggiungendo gem 'certified', '~> 1.0' al mio Gemfile e il bundle esecuzione ho risolto questo problema per me.

Basta eseguire l’eseguibile certified-update e questo comando farà in modo che tutti i certificati siano aggiornati.

Questo ha funzionato per l’applicazione Ruby on Rails in Windows.

Ho dovuto reinstallare Ruby. Questo dovrebbe risolverlo se stai usando Ubuntu e rbenv:

 rbenv uninstall your_version # install dependencies sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev # install ruby with patch curl -fsSL https://gist.github.com/mislav/055441129184a1512bb5.txt | \ rbenv install --patch your_version 

Per ulteriori informazioni, controlla il Wiki rbenv sull’argomento.