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

mbd*_*dev 73 ssl ruby-on-rails

我正在尝试使用signet将OAuth用于Google服务.并得到此错误:

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
Run Code Online (Sandbox Code Playgroud)

以下问题:

似乎解决方案是修复ca_path设置VERIFY_NONESSL.

ca_path发布的修复程序仅适用于Linux(端口安装),修复程序VERIFY_NONE似乎适用于法拉第.

是否有Windows/signet gem的解决方案?

Som*_*ere 188

实际上,我发现在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')
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 不要这样做.安装通过HTTP(非HTTPS)下载的随机证书作为完全受信任的根证书只是在寻找麻烦.没关系,在答案后面提到的图书馆也因不安全而闻名. (11认同)
  • 我认为这应该是公认的解决方案. (9认同)
  • 优秀.我没有使用Rails,所以这是最好的解决方案. (8认同)
  • 这是最好的解决方案. (5认同)
  • 仅供参考我使用下载厨师食谱的`librarian-chef`时,我需要使用Chef附带的这个证书:`C:/ opscode/chefdk/embedded/ssl/certs/cacert.pem` (2认同)
  • @DevDude这个解决方案几个月前就开始运作了.最近Windows更新后,我的桌面和笔记本电脑不再工作= /任何想法? (2认同)

Arc*_*lye 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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 显然,重启你的服务器.

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

  • 通过HTTP下载证书是一个糟糕的主意. (3认同)

小智 20

经过太多的搜索和浪费时间,我找到了一个非常简单的解决方案来解决这个问题在Ruby中使用Windows.

两个简单的步骤:

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

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

而已.


小智 9

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

https://rubygems.org/pages/download

gem update --system          # may need to be administrator or root
Run Code Online (Sandbox Code Playgroud)


小智 8

是的,我已将initializers文件夹中的omniouth.rb文件设置为:

provider :facebook, FACEBOOK_KEY, FACEBOOK_SECRET, {:client_options => {:ssl => {:verify => false}}}
Run Code Online (Sandbox Code Playgroud)

这似乎现在工作正常.但是不要将它用于生产.

  • 我很欣赏"不要在生产中使用它",但我觉得它应该全部上限,突出显示,重复,强调和重申.鉴于下面的答案,我觉得应该删除这个答案. (2认同)

nif*_*ody 5

使用http:// URL而不是https://可以让您更轻松

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

gem sources -a http://rubygems.org/
Run Code Online (Sandbox Code Playgroud)