我正在尝试使用signet将OAuth用于Google服务。并得到这个错误:
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
以下问题:
似乎解决方案是修复ca_path
或设置。VERIFY_NONE
以获取SSL
发布的ca_path
修补程序仅适用于Linux(端口安装),VERIFY_NONE
的修复程序似乎适用于法拉第。
是否有针对Windows / signet gem的解决方案?
答案 0 :(得分:187)
实际上,我发现在Windows中为Ruby本身而不仅仅是一个gem解决这个问题的最佳方法是执行以下操作:
创建一个新的系统变量:
变量:SSL_CERT_FILE 值:C:\ RailsInstaller \ cacert.pem
关闭所有命令提示,包括Rails服务器命令提示符等。
启动新的ruby irb提示符,然后尝试以下操作:
$irb>require 'open-uri'
$irb>open('https://www.gmail.com')
现在应该都可以了。
答案 1 :(得分:27)
Windows的解决方案,我从几个不同的答案拼凑而成:
在 config / initializers / omniauth.rb 中:
#config/initializers/omniauth.rb Rails.application.config.middleware.use OmniAuth::Builder do provider :facebook, CUSTOMER_KEY, CUSTOMER_SECRET, {client_options: {ssl: {ca_file: Rails.root.join('lib/assets/cacert.pem').to_s}}} end
显然,重新启动服务器。
<强> 脚注: 强>
您可以在cacert.pem文件中删除大量不必要的证书以减小大小。如果您只需要此解决方案进行开发,则可以将文件保存在项目之外,并使用client_options hash_ if Rails.env.development?
_provider行执行else
_provider行,而不使用client_options hash_ end
答案 2 :(得分:20)
经过太多的搜索和浪费时间后,我发现了一个非常简单的解决方案,可以在Ruby中使用Windows解决这个问题。
两个简单的步骤:
在命令提示符下写:C:\gem install certified
在rb
文件中添加:require 'certified'
那就是它。
答案 3 :(得分:9)
更新rubygems包管理框架在Windows 7上为我解决了这个问题。
https://rubygems.org/pages/download
gem update --system # may need to be administrator or root
答案 4 :(得分:8)
是的,我已将initializers文件夹中的omniouth.rb文件设置为:
provider :facebook, FACEBOOK_KEY, FACEBOOK_SECRET, {:client_options => {:ssl => {:verify => false}}}
现在这似乎工作正常。但不要将其用于制作。
答案 5 :(得分:5)
使用http:// URL代替https://让您更轻松
在ruby命令行上使用以下命令行将gem源更改为http://rubygems.org/
gem sources -a http://rubygems.org/
答案 6 :(得分:2)
转到rubygems-update下载页面:https://rubygems.org/gems/rubygems-update
单击“下载”链接,您将下载名为rubygems-update-2.6.7.gem的文件。在命令行中,导航到您下载.gem文件的目录,然后键入:
gem install rubygems-update-2.6.7.gem
(或者无论文件名是什么,如果是更新的版本)
然后输入:
update_rubygems
您可以通过以下方式验证更新:
gem --version
答案 7 :(得分:1)
添加到DevDude的解决方案,但使用Windows Powershell:
将http://curl.haxx.se/ca/cacert.pem下载到c:\ railsinstaller \ cacert.pem
在powershell提示符下:
$env:SSL_CERT_FILE = 'c:\RailsInstaller\cacert.pem'
然后我能够成功运行gem update
注意:您只需在个人资料notepad $profile
答案 8 :(得分:1)
我在尝试在Windows机器上设置rails 5时出现此错误,结果我必须将rubygem版本更新为2.6.7然后它才有效。
第1步从下面下载rubygem
https://rubygems.org/downloads/rubygems-update-2.6.7.gem
第2步 - 通过指向下载的rubygems安装
gem install --local C:\rubygems-update-2.6.7.gem
第3步 - 检查新版本是否为2.6.7
gem --version
第4步 - 现在安全地卸载rubygems-update gem
gem uninstall rubygems-update -x
第5步尝试再次安装rails 5
gem install rails --version 5.0.0
像魅力一样工作!
我收到的信息来自: http://guides.rubygems.org/ssl-certificate-update/#installing-using-update-packages
答案 9 :(得分:0)
我可以通过将证书导入为可信任权限来消除上述PATH或SYSTEM VARIABLE设置。
答案 10 :(得分:0)
我认为正确的答案是更新您的gem安装程序:rubygems-update。有关原因的解释可在以下网址找到:Ssl Certificate Updates
答案 11 :(得分:0)
从https://curl.haxx.se/ca/cacert.pem保存您的cacert.pmp文件,然后将此文件添加到位置yourruby-installation文件夹\ lib \ ruby \ 2.3.0 \ rubygems \ ssl_certs
例如:C:\ Ruby23 \ lib \ ruby \ 2.3.0 \ rubygems \ ssl_certs
答案 12 :(得分:0)
这对我有所帮助: https://coderwall.com/p/ubl6iw/fix-ssl_connect-returned-1-errno-0-state-sslv3-read-server-certificate-b-certificate-verify-failed-openssl-ssl-sslerror 我的ruby on rails项目是在内部将数据发布到api,它无法验证内部证书。 这些行帮助:
require 'https'
http = Net::HTTP.new('example.com', 443)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.cert_store = OpenSSL::X509::Store.new
http.cert_store.set_default_paths
http.cert_store.add_file('/path/to/internal.cert.pem')
希望这可以提供帮助。
答案 13 :(得分:0)
当我安装旧的ruby版本时,我也遇到了这个问题。当我安装最新的Ruby版本时,这个问题就消失了。所以基本上需要更新SSL证书。
答案 14 :(得分:-3)
对于使用rails 4的人。
在devise.rb中添加此内容
require "omniauth-google-oauth2"
config.omniauth :google_oauth2, "CLIENT_ID", "CLIENT_SECRET", { access_type: "offline", approval_prompt: "", :client_options => {:ssl => {:verify => false}} }