ruby-on-rails - rails/Ubuntu : SSLv3 read server certificate B: certificate verify failed

标签 ruby-on-rails ruby ssl certificate savon

两天前,我开始在我的应用程序的生产服务器上看到这个错误(在暂存时一切正常)。我在这里找到了很多关于 SO 的主题,但没有一个能为我解决这个问题。

这是导致此错误消息的代码片段:

  @client = Savon.client(wsdl: wsdl_url)
  #@client = Savon.client(wsdl: wsdl_url, ssl_verify_mode: :none) # this sovles the problem, but I don't want to skip the verification 

在 SO 上,我还发现一个可能的解决方案可能是创建一个初始化文件并在其中放置以下内容:

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

module Net
  class HTTP
    alias_method :original_use_ssl=, :use_ssl=

    def use_ssl=(flag)
      #self.ca_path = Rails.root.join('lib/ca-bundle.crt').to_s
      self.ssl_version = :TLSv1_2 # added
      self.ca_file = '/etc/ssl/certs/ca-certificates.crt' # the file exists
      self.verify_mode = OpenSSL::SSL::VERIFY_PEER
      self.original_use_ssl = flag
    end
  end
end

但是不幸的是,这并没有解决错误。我还尝试在生产 Ubuntu (14.04) 服务器上重新安装证书

sudo apt-get install openssl ca-certificates

包已升级,可惜错误依旧。

有什么提示我可以做什么来消除错误?

编辑:我应该如何或从哪里开始调试?

最佳答案

运行 openssl s_client -showcerts -connect server_you_are_connecting_to.com:443 并检查证书。在此之后,您应该会发现自己处于以下情况之一:

  1. 证书有效(具有有效的到期日期和通用名称),但它是由您的系统不信任的证书颁发机构 (CA) 签署的。如果是这种情况,您需要将 CA 的证书添加到受信任的存储区或更新系统上的 ca-bundle 包。

  2. 证书无效(已过期或公用名错误)。如果禁用对等 SSL 证书验证不适合您,那么您可以实现自己的证书验证回调,例如 here 中所述-- 在这种情况下,代码不会依赖于系统的可信存储,而是检查对等服务器是否使用特定证书。

希望这对您有所帮助。

关于ruby-on-rails - rails/Ubuntu : SSLv3 read server certificate B: certificate verify failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49149117/

相关文章:

jquery - 查找集中表的左边距值

ruby-on-rails - 如何在 Ruby On Rails 中按升序获取最后 50 条创建的记录

ssl - 在禁用 SSL 的情况下将 .NET 5 部署到 IIS 服务器

ruby - 在 Selenium Grid 环境中使用 Watir-WebDriver 绕过证书错误

ruby-on-rails - rails 4 + AngularJS : templateUrl for directive not found?

ruby-on-rails - Rails Controller 中的 'env' 和 'request.env' 有什么区别?

ruby - 使用 Savon SOAP 客户端的 API 调用导致 EndpointDispatcher 错误中的 ContractFilter 不匹配

ruby-on-rails - 我的 Rails 应用程序外部端点的集成测试的良好做法?

ruby - 从 GET 请求中读取 zip 文件而不先在 Ruby 中保存?

node.js - Angular-Nodejs SSL