SSL_connect retornado = 1 errno = 0 state = Certificado de servidor de leitura SSLv3 B: falha na verificação do certificado

Estou usando o Authlogic-Connect para logins de terceiros. Depois de executar as migrações apropriadas, os logins do Twitter / Google / yahoo parecem funcionar bem, mas o login do Facebook gera uma exceção:

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

O log de desenvolvimento 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' 

Por favor sugira..

Eu tive um problema semelhante ao tentar usar o gerador JQuery para Rails 3

Eu resolvi assim:

  1. Obtenha o pacote da Autoridade de Certificação CURL (CA). Você pode fazer isso com:

    • sudo port install curl-ca-bundle [se você estiver usando MacPorts]
    • ou simplesmente puxe-o diretamente wget http://curl.haxx.se/ca/cacert.pem
  2. Execute o código ruby ​​que está tentando verificar a certificação SSL: SSL_CERT_FILE=/opt/local/etc/certs/cacert.pem rails generate jquery:install . No seu caso, você quer tanto definir isso como uma variável de ambiente em algum lugar que o servidor o pegar ou adicionar algo como ENV['SSL_CERT_FILE'] = /path/to/your/new/cacert.pem no seu arquivo environment.rb.

Você também pode simplesmente instalar os arquivos CA (eu não tentei isso) para o sistema operacional – há instruções longas aqui – isso deve funcionar de forma semelhante, mas eu não tentei isso pessoalmente.

Basicamente, o problema que você está atingindo é que algum serviço da Web está respondendo com um certificado assinado em uma CA que o OpenSSL não pode verificar.

Se você estiver usando o RVM no OS X, provavelmente precisará executar isto:

 rvm osx-ssl-certs update all 

Mais informações aqui: http://rvm.io/support/fixing-broken-ssl-certificates

E aqui está a explicação completa: https://github.com/wayneeseguin/rvm/blob/master/help/osx-ssl-certs.md


Atualizar

No Ruby 2.2, você pode ter que reinstalar o Ruby da fonte para corrigir isso. Aqui está como (substitua o 2.2.3 pela sua versão do Ruby):

 rvm reinstall 2.2.3 --disable-binary 

Crédito para https://stackoverflow.com/a/32363597/4353 e Ian Connor .

Veja como você pode corrigi-lo no Windows: https://gist.github.com/867550 (criado por Fletcher Nichol)

Excerto:

O Caminho Manual (chato)

Faça o download do arquivo cacert.pem em http://curl.haxx.se/ca/cacert.pem . Salve este arquivo em C:\RailsInstaller\cacert.pem .

Agora, torne o Ruby ciente de seu pacote de autoridade de certificação configurando SSL_CERT_FILE . Para definir isso na sua session de prompt de comando atual, digite:

 set SSL_CERT_FILE=C:\RailsInstaller\cacert.pem 

Para tornar isso uma configuração permanente, adicione isso ao seu painel de controle .

Ruby não pode encontrar nenhum certificado raiz para confiar.

Dê uma olhada nesta postagem do blog para uma solução: ” Ruby 1.9 e o erro SSL “.

A solução é instalar a porta curl-ca-bundle que contém os mesmos certificados raiz usados ​​pelo Firefox:

 sudo port install curl-ca-bundle 

e diga ao seu object https para usá-lo:

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

Observe que, se você quiser que seu código seja executado no Ubuntu, será necessário configurar o atributo ca_path , com a localização dos certificados padrão /etc/ssl/certs .

O motivo pelo qual você obtém esse erro no OSX é o ruby ​​instalado pelo rvm.

Se você se deparar com este problema no OSX, você pode encontrar uma explicação muito ampla sobre isso nesta postagem do blog:

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

A versão curta é que, para algumas versões do Ruby, o RVM faz o download de binários pré-compilados, que procuram certificados no local errado. Ao forçar o RVM a fazer o download da origem e compilar em sua própria máquina, você garante que a configuração do local do certificado esteja correta.

O comando para fazer isso é:

 rvm install 2.2.0 --disable-binary 

Se você já tiver a versão em questão, poderá reinstalá-la com:

 rvm reinstall 2.2.0 --disable-binary 

(obviamente, substitua sua versão ruby ​​conforme necessário).

O problema é que o ruby ​​não pode encontrar um certificado raiz para confiar. A partir de 1,9 ruby ​​verifica isso. Você precisará certificar-se de ter o certificado curl em seu sistema na forma de um arquivo pem. Você também precisará certificar-se de que o certificado esteja no local que o Ruby espera que ele seja. Você pode obter este certificado em …

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

Se você é um usuário RVM e OSX, a localização do seu arquivo de certificado irá variar com base na versão do ruby ​​que você está usando. Definir o caminho explicitamente com: ca_path é uma má ideia, já que seu código não será portátil quando chegar à produção. Lá, você quer fornecer um certificado para o ruby ​​no local padrão (e assumir que seus funcionários de desenvolvedores sabem o que estão fazendo). Você pode usar dtruss para descobrir onde o sistema está procurando pelo arquivo de certificado.

No meu caso, o sistema estava procurando o arquivo cert em

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

no entanto, o sistema MACOSX esperaria um certificado em

 /System/Library/OpenSSL/cert.pem 

Eu copiei o certificado baixado para esse caminho e funcionou. HTH

A nova gema certificada é projetada para corrigir isso:

https://github.com/stevegraham/certified

No Mac OS X Lion com o último macport:

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

Em seguida, execute novamente o trabalho que falhou.

Note que a localização do arquivo cert parece ter mudado desde que Eric G respondeu em 12 de maio.

Basta adicionar gem ‘certified’ no seu gemfile e executar a instalação do pacote.

  1. gem ‘ certificada
  2. instalação do pacote

Um liner corrige para o Windows em um prompt de administrador

choco install wget (primeiro ver chocolatey.org )

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

Ou apenas faça isso:

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

Método de 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] 

Bem, isso funcionou para mim

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

Algo está errado com a implementação openssl do meu Ubuntu 12.04

Eu tentei instalar curl-ca-bundle com brew , mas o pacote não está disponível mais:

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

A solução que funcionou para mim no Mac foi:

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

Adicione esta linha em seu ~/.bash_profile (ou ~/.zshrc para zsh):

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

Em seguida, atualize seu terminal:

 $ source ~/.bash_profile 

Aqui está outra opção para fins de debugging.

Certifique-se de nunca usar isso em qualquer ambiente de produção, pois isso irá negar os benefícios de usar o SSL em primeiro lugar. Só é válido fazer isso em seu ambiente de desenvolvimento local.

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

Apesar de saber que é uma solução ruim, ainda estou compartilhando isso porque parece que poucas pessoas que estão respondendo aqui usam o Windows , e acho que alguns usuários do Windows (eu incluído) gostariam de uma abordagem simples e intuitiva.

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

Isso diz onde o seu openssl está procurando pelo arquivo cert. Meu nome não é Luis, mas o meu era C:/Users/Luis/Code/luislavena/knap-build/var/knapsack/software/x86-windows/openssl/1.0.0l/ssl/cert.pem . O caminho pode ser diferente dependendo de cada ambiente (por exemplo, openknapsack vez de luislavena ).

O caminho não mudou mesmo depois de set SSL_CERT_FILE=C:\foo\bar\baz\cert.pem via console, então … eu criei o diretório C:\Users\Luis\Code\luislavena\knap-build\var\knapsack\software\x86-windows\openssl\1.0.0l\ssl no meu disco local e coloque um arquivo cert nele.

Por mais fraco que seja, isso certamente funcionará.

Eu tive esse mesmo problema ao trabalhar em um projeto Ruby. Eu estou usando o Windows 7 64 bits.

Eu resolvi isso por:

  1. Baixando o arquivo cacert.pem de http://curl.haxx.se/ca/cacert.pem .
  2. Salvei esse arquivo em C: /RubyCertificates/cacert.pem
  3. Em seguida, defina minha variável ambiental “SSL_CERT_FILE” como “C: \ RubyCertificates \ cacert.pem”

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

A resposta mais direta que funcionou para mim foi esta

 sudo apt-get install openssl ca-certificates 

E voila !!!

OS X 10.8.x com 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 

Então, como este post sugere,

” Como curar a rede :: Comportamento HTTPS de risco padrão do HTTP ”

talvez você queira instalar a gem always_verify_ssl_certificates que permite definir um valor padrão para ca_file .

Isso funcionou para mim. Se você estiver usando rvm e brew:

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

Eu me deparei com este problema e a correção sugerida de rvm osx-ssl-certs update all não funcionou, apesar de eu ser um usuário RVM no OSX.

A correção que funcionou para mim foi reinstalar a versão mais recente do openssl:

 brew update brew remove openssl brew install openssl 

Eu consertei esse problema executando este terminal. O writeup completo está disponível aqui

 rvm install 2.2.0 --disable-binary 

Solução OSX:

instalar a versão estável mais recente do rvm

 rvm get stable 

use o comando rvm para resolver os certificados automaticamente

 rvm osx-ssl-certs update all 

Aqui está o que eu fiz que ajudou se você está especificamente tendo um problema no Leopard.

Meu certificado era antigo e precisava ser atualizado. Eu baixei isso:

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

Em seguida, substituí meu certificado que foi encontrado aqui no Leopard:

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

Recarregue o que você tem que está acessando e você deve estar pronto!

Só porque as instruções eram um pouco diferentes para o que funcionou para mim, eu pensei em adicionar meus 2 centavos:

Eu estou no OS X Lion e usando macports e rvm

Eu instalei o curl-ca-bundle:

 sudo port install curl-ca-bundle 

Então eu ajustei minha configuração omniauth para ser isso:

 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 você tem um link simbólico em / usr / local / etc / openssl apontando para cert.pem tente fazer isto:

 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 você estiver executando seu aplicativo rails localmente, basta adicionar essa linha na parte inferior do application.rb.

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

Depois disso, você pode usar o aplicativo sem problemas. Você pode chamá-lo de hack, mas não é recomendado. Use somente quando você precisar executar localmente

Eu tive problemas por vários dias e estava hacking. Este link provou ser extremamente útil para mim. Isso me ajudou a fazer uma atualização bem-sucedida do SSL no MAC OS X 9.

Adicionando gem 'certified', '~> 1.0' ao meu Gemfile e bundle execução resolveu este problema para mim.

Basta executar o executável da certified-update e este comando garantirá que todos os seus certificados estejam atualizados.

Isso funcionou para o meu aplicativo Ruby on Rails no Windows.

Eu tive que reinstalar o Ruby. Isso deve resolvê-lo se você estiver usando o Ubuntu & 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 

Para mais informações, confira o rbenv Wiki sobre o assunto.