ruby - SSL 验证错误 Ruby

标签 ruby ssl

所以我有这个脚本:

#!/usr/bin/ruby

require 'net/https'
require 'open-uri'

puts "HTTPS Client for Ruby!"
puts "Enter the URL"
site = gets.chomp

url = URI.parse(site)

http = Net::HTTP.new(url.host,url.port)
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('/home/user/sec/certs/cacert.pem')

page = Net::HTTP.get(url)

puts page

它工作正常。它能够抓取几乎所有 http 或 https 网站的主页的 html。但是,我在无法使用的虚拟机中设置了启用 HTTPS 的网络服务器。在我在网络服务器上启用 SSL 之前,这个脚本很好地抓取了 html。所以我的问题是,为什么我会收到此错误:

/usr/lib/ruby/2.1.0/net/http.rb:920:in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)
    from /usr/lib/ruby/2.1.0/net/http.rb:920:in `block in connect'
    from /usr/lib/ruby/2.1.0/timeout.rb:67:in `timeout'
    from /usr/lib/ruby/2.1.0/net/http.rb:920:in `connect'
    from /usr/lib/ruby/2.1.0/net/http.rb:863:in `do_start'
    from /usr/lib/ruby/2.1.0/net/http.rb:852:in `start'
    from /usr/lib/ruby/2.1.0/net/http.rb:583:in `start'
    from /usr/lib/ruby/2.1.0/net/http.rb:478:in `get_response'
    from /usr/lib/ruby/2.1.0/net/http.rb:455:in `get'
    from https_client.rb:20:in `<main>'

当运行脚本试图获取我的网络服务器的 html 时?我指定的路径在那里有一个实际的证书。

最佳答案

当 SSL 证书是自签名的/不是来自经过验证的 SSL 提供商时,您会收到该错误。因此假设您从中提取的网站是您自己的/您信任它并且没有经过验证的证书,请更改

http.verify_mode = OpenSSL::SSL::VERIFY_PEER

http.verify_mode = OpenSSL::SSL::VERIFY_NONE

same situation

关于ruby - SSL 验证错误 Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22340673/

相关文章:

javascript - 如何使用 Jeykll 防止 Vue 组件的属性名称小写或小写转换

arrays - ruby 基础 : Pop Method in Array

windows - Howto - 在 mongrel 上运行 Redmine 作为 Windows 上的服务

ruby-on-rails - 在 Ruby on Rails 应用程序中加载 .env

ssl - curl 请求 TLS 警报,Windows WSL 中的未知 CA

python - brew 安装Python 3.6.1 : [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

java - keytool导入证书和java系统属性

ruby-on-rails - Ruby on Rails -- NameError '@' 不允许作为实例变量名

ssl - OPENSSL s_cient 请求失败(408 请求超时)

asp.net - WCF 中的 System.ServiceModel.AddressAlreadyInUseException (Visual Studio 2017)