Rails OpenSSL::SSL::SSLError 如何解决?

redvoilin · 2012年05月16日 · 最后由 xiaocui 回复于 2018年01月26日 · 26202 次阅读

为了获取微博access_token,需要发送https请求,用到了openssl,在mac上没问题,我部署到centos上,出现了

OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed)

设置了 ca_fileca_path 或者 http.verify_mode = OpenSSL::SSL::VERIFY_NONE 也都不起作用,请问有人知道怎么解决吗?

共收到 9 条回复

是因为你的 CentOS 上面的 SSL 证书太旧了,之前 Ruby China 也有这样的问题。 后面我是设置 :

require 'openssl'
module OpenSSL
  module SSL
    remove_const :VERIFY_PEER
  end
end

这样来跳过的


正确的解决方法:

更新 OpenSSL

rvm pkg install openssl
rvm reinstall 2.1.2

找到你服务器上的证书, 加上这个就好了

{:client_options => {:ssl => {:ca_path => "/etc/ssl/certs"}}}

开发环境的话

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

@Guest @huacnlee 我想问下,我没有部署到服务器上,就是自己在本地用omniauth-github,callback的时候就发生这种问题,应该怎么办啊?

你好,我也在做相似的事情,但是在获取sina微博的token时,在最后一步跳转到回调地址时,拿不到code值, 能交流一下您是怎么拿到的么

#1楼 @huacnlee

ubuntu 14.04
rvm 1.25
ruby 2.1.3

rvm pkg install openssl
rvm reinstall 2.1.3

还是不行. OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server hello A: sslv3 alert handshake failure): 我是使用rest-client发送send-cloud邮件的时候遇到的. 网上多种方式试了都无效.

我也遇到这个问题 各位解决了么

https://github.com/google/google-api-ruby-client/issues/235 在这里找到了类似的问题,用@dblommesteijn 的方法可行。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册