[英]SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
[英]Rails/Ubuntu: SSLv3 read server certificate B: certificate verify failed
两天前,我开始在我的应用的生产服务器上看到此错误(暂存一切正常)。 我在这里找到了很多关于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
该软件包已升级,但是不幸的是错误仍然存在。
有什么提示我该怎么办才能摆脱错误?
编辑:如何或应该在哪里开始调试?
几天前我也开始收到此错误。
删除geocoder
此问题。
在Heroku的支持下,当外部提供商更改其SSL配置时,有时会发生这些错误。
回复评论:
日志中没有特别说明Geocoder的内容,但是我在错误报告中(通过异常通知程序gem)看到,应用程序在向Geocoder请求的行上因该错误而崩溃。
我还对用户模型进行了回调,并注意到只要保存/更新用户,应用程序就会崩溃。
我猜是幸运的。
运行openssl s_client -showcerts -connect server_you_are_connecting_to.com:443
并检查证书。 之后,您将发现自己处于以下情况之一:
证书有效(具有有效的到期日期和通用名称),但是由系统不信任的证书颁发机构(CA)签名。 如果是这种情况,则需要将CA的证书添加到受信任的存储中,或更新系统上的ca-bundle软件包。
证书无效(已过期或通用名称错误)。 如果您不能选择禁用对等SSL证书验证,则可以实现自己的证书验证回调,例如此处所述-在这种情况下,代码将不依赖于系统的受信任存储,而是检查对等服务器使用特定的证书。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.