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

我正在尝试使用signet将OAuth转换为Google服务。 并得到这个错误:

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

以下问题:

  • SSL_connect返回= 1 errno = 0状态= SSLv3读取服务器证书B:证书validation失败
  • OmniAuth&Facebook:证书validation失败

似乎解决方法是修复ca_path为SSL设置VERIFY_NONE

ca_path修复只适用于Linux(端口安装),修复VERIFY_NONE似乎是法拉第。

有没有Windows /印章gem的解决scheme?

实际上,我发现在Ruby的本地窗口中解决这个问题的最好办法,不仅仅是一个gem,而是要做到以下几点:

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

    variables:SSL_CERT_FILE值:C:\ RailsInstaller \ cacert.pem

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

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

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

它应该现在都工作得很好。

Windows的解决scheme,我从几个不同的答案拼凑在一起:

  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. 显然,重新启动你的服务器。

脚注:您可以在cacert.pem文件中删除大量不必要的证书以减小文件大小。 如果你只需要这个开发的解决scheme,你可以将文件保存在你的项目之外,并做一个if Rails.env.development? _provider行与client_options hash_ else _provider行没有client_options hash_ end

经过太多的search和浪费的时间,我发现了一个非常简单的解决scheme来解决这个问题在Ruby与Windows。

两个简单的步骤:

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

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

而已。

更新rubygems包pipe理框架在Windows 7上为我解决了这个问题。

https://rubygems.org/pages/download

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

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

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

现在看起来工作正常。 但是不要用它来生产

使用http:// URL而不是https://可以让你更容易

通过在ruby命令行中使用以下命令行将gem源代码更改为http://rubygems.org/

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

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

点击下载链接,你会下载一个名为rubygems-update-2.6.7.gem的文件。 在命令行中,导航到您下载.gem文件的目录,然后键入:

 gem install rubygems-update-2.6.7.gem 

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

然后键入:

 update_rubygems 

你可以validation它的更新:

 gem --version 

添加到DevDude的解决scheme,但使用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定义这个环境variables

我有这个错误,而试图在Windows机器上安装轨5,事实certificate,我必须更新到2.6.7 ruby​​gem版本,然后它的工作。

第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-updategem

 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

通过导入证书作为信任的权限,我能够消除上述的PATH或SYSTEM VARIABLE设置。

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

我相信正确的答案是更新您的gem安装程序: rubygems-update 。 为什么需要这个解释是在Ssl证书更新

https://curl.haxx.se/ca/cacert.pem保存您的cacert.pmp文件,然后将此文件添加到您的ruby安装文件夹;\ lib \ ruby​​ \ 2.3.0 \ ruby​​gems \ ssl_certs

例如:C:\ Ruby23 \ lib \ ruby​​ \ 2.3.0 \ ruby​​gems \ ssl_certs

这帮助我: 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,并且无法validation内部证书。 这些线帮助:

 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证书需要更新。

对于正在使用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}} }