两天前,我开始在我的应用程序的生产服务器上看到这个错误(在暂存时一切正常)。我在这里找到了很多关于 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
并检查证书。在此之后,您应该会发现自己处于以下情况之一:
证书有效(具有有效的到期日期和通用名称),但它是由您的系统不信任的证书颁发机构 (CA) 签署的。如果是这种情况,您需要将 CA 的证书添加到受信任的存储区或更新系统上的 ca-bundle 包。
证书无效(已过期或公用名错误)。如果禁用对等 SSL 证书验证不适合您,那么您可以实现自己的证书验证回调,例如 here 中所述-- 在这种情况下,代码不会依赖于系统的可信存储,而是检查对等服务器是否使用特定证书。
希望这对您有所帮助。
关于ruby-on-rails - rails/Ubuntu : SSLv3 read server certificate B: certificate verify failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49149117/