如何解决Windows上的“证书验证失败”?

时间:2011-04-19 17:49:23

标签: ruby-on-rails ssl

我正在尝试使用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的解决方案?

15 个答案:

答案 0 :(得分:187)

实际上,我发现在Windows中为Ruby本身而不仅仅是一个gem解决这个问题的最佳方法是执行以下操作:

  1. https://curl.haxx.se/ca/cacert.pem下载到c:\ railsinstaller \ cacert.pem。确保将其另存为.pem文件,而不是文本文件。
  2. 转到您的计算机 - >高级设置 - >环境变量
  3. 创建一个新的系统变量:

    变量:SSL_CERT_FILE 值:C:\ RailsInstaller \ cacert.pem

  4. 关闭所有命令提示,包括Rails服务器命令提示符等。

  5. 启动新的ruby irb提示符,然后尝试以下操作:

    $irb>require 'open-uri'
    $irb>open('https://www.gmail.com')
    
  6. 现在应该都可以了。

答案 1 :(得分:27)

Windows的解决方案,我从几个不同的答案拼凑而成:

  1. 下载https://curl.haxx.se/ca/cacert.pem并将其放入 YOUR_APP / lib / assets (或任何地方)
  2. 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
    
  3. 显然,重新启动服务器。

  4. <强> 脚注: 您可以在cacert.pem文件中删除大量不必要的证书以减小大小。如果您只需要此解决方案进行开发,则可以将文件保存在项目之外,并使用client_options hash_ if Rails.env.development? _provider行执行else _provider行,而不使用client_options hash_ end

答案 2 :(得分:20)

经过太多的搜索和浪费时间后,我发现了一个非常简单的解决方案,可以在Ruby中使用Windows解决这个问题。

两个简单的步骤:

  1. 在命令提示符下写:C:\gem install certified

  2. rb文件中添加:require 'certified'

  3. 那就是它。

答案 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设置。

  1. 调用certmgr.msc
  2. 右键单击“受信任的根证书颁发机构”文件夹。
  3. 选择“所有任务”
  4. 选择“导入”
  5. 在文件类型下拉列表中选择所有文件,然后选择cacert.pem文件。
  6. 您应该会收到一条消息“导入成功”

答案 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 \ ruby​​gems \ ssl_certs

例如:C:\ Ruby23 \ lib \ ruby​​ \ 2.3.0 \ ruby​​gems \ 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}} }