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

我正在尝试使用 OAuth 的 signet 到 Google 服务,并得到这个错误:

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

下面是这些问题:

看来解决方案是要么修复 ca_path为 SSL 设置 VERIFY_NONE

发布的 ca_path修复程序只能在 Linux (端口安装)上使用,而 VERIFY_NONE的修复程序似乎只能在法拉第上使用。

有没有 Windows/signet gem 的解决方案?

62562 次浏览

是的,我已经将初始化器文件夹中的 omniouth.rb 文件设置为:

provider :facebook, FACEBOOK_KEY, FACEBOOK_SECRET, {:client_options => {:ssl => {:verify => false}}}

现在看起来还不错,但是 不要把这个用在制作上

Windows 的解决方案,这是我从几个不同的答案中拼凑出来的:

  1. 下载 https://curl.haxx.se/ca/cacert.pem并将其放入 您的 _ APP/lib/asset(或其他地方)
  2. Config/initializer/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. 显然,重新启动您的服务器。

脚注: 您也许可以删除 ccert.pem 文件中的大量不必要的证书,以减小其大小。如果您只需要此解决方案进行开发,则可以将文件保存在项目之外,并使用 client _ options hash _ else _ Provider 行执行 if Rails.env.development? _ Provider 行,而不使用 client _ options hash _ end

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

  1. https://curl.haxx.se/ca/cacert.pem下载到 c: Railsinstaller ccert.pem 中。确保将其保存为. pem 文件,而不是文本文件。
  2. 进入你的电脑-> 高级设置-> 环境变量
  3. 创建一个新的系统变量:

    变量: SSL _ CERT _ FILE 值: C: RailsInstaller ccert.pem

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

  5. 启动一个新的 ruby irb 提示符,并尝试以下操作:

    $irb>require 'open-uri'
    $irb>open('https://www.gmail.com')
    

It should all work now just fine.

适用于使用轨道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}} }

添加到 Devdud 的解决方案中,但使用 Windows PowerShell:

http://curl.haxx.se/ca/cacert.pem下载到 c: Railsinstaller ccert.pem 中

在 powershell 提示符下:

$env:SSL_CERT_FILE = 'c:\RailsInstaller\cacert.pem'

然后我成功地运行了 gem update

注意: 你可以简单地在你的配置文件中定义这个环境变量

更新 rubygems 包管理框架为我在 Windows7上解决了这个问题。

Https://rubygems.org/pages/download

gem update --system          # may need to be administrator or root

我能够通过导入证书作为受信任的权威来消除上面提到的 PATH 或系统变量设置。

  1. 调用 certmgr.msc
  2. 右键单击“受信任的根证书权威”文件夹。
  3. 选择“所有任务”
  4. 选择「汇入」
  5. 选择文件类型下拉列表中的 All Files 并选择 ccert.pem 文件。
  6. 您将收到一条消息“ Import Success”

经过长时间的搜索和浪费时间,我找到了一个非常简单的解决方案,可以用 Ruby 和 Windows 来解决这个问题。

两个简单的步骤:

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

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

就是这样。

我相信正确的答案是更新您的 gem 安装程序: 更新。为什么需要这样做的解释见: SSL 证书更新

转到 rubygems-update 下载页面: https://rubygems.org/gems/rubygems-update

点击下载链接,您将下载一个名为 rubygems-update-2.6.7的文件。宝石。在命令行中,导航到下载的。打开 gem 文件并键入:

gem install rubygems-update-2.6.7.gem

(或者不管文件名是什么,如果是新版本的话)

然后输入:

update_rubygems

您可以验证它的更新:

gem --version

使用 http://URL 而不是 https://可以使您更容易做到这一点

通过在 Ruby 命令行上使用以下命令行将 gem 源更改为 http://rubygems.org/

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

https://curl.haxx.se/ca/cacert.pem中保存 cacert.pmp 文件,然后将该文件添加到您的 ruby 安装文件夹 lib ruby 2.3.0 rubygems ssl _ certs 的位置

例如: C: Ruby23 lib ruby 2.3.0 rubygems ssl _ certs

我在 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-更新 gem

gem uninstall rubygems-update -x

步骤5再次尝试安装轨道5

gem install rails --version 5.0.0

非常有效!

我得到的信息来自: Http://guides.rubygems.org/ssl-certificate-update/#installing-using-update-packages

这对我有帮助: 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 ails 项目正在内部将数据发送到 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')

希望这个能帮上忙。

我在安装旧的 Ruby 版本时也遇到了这个问题。当我安装最新的 Ruby 版本时,这个问题就消失了。所以基本上 SSL 证书需要更新。