ruby-on-rails - OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: 证书验证失败

标签 ruby-on-rails ssl faraday

我在 Heroku 上托管了 Rails API 服务器,它向客户端在初始 API 请求中指定的回调 URL 发出异步 POST 请求。

当我尝试通过 SSL POST 到我的一个客户的 Web 应用程序时遇到问题。

connection = Faraday::Connection.new('https://subdomain.some_client.com', ssl: { ca_file: '/usr/lib/ssl/certs/ca-certificates.crt' })
connection.get '/test'

以下会引发错误:

Faraday::Error::ConnectionFailed: SSL_connect returned=1 errno=0 state=error: certificate verify failed

但是,如果我通过 HTTPS 发布到另一个服务器,例如 google,它工作正常

connection = Faraday::Connection.new('https://www.google.com', ssl: { ca_file: '/usr/lib/ssl/certs/ca-certificates.crt' })
connection.get '/'

这是否意味着错误出在客户端的 SSL 配置上?如果是,我该如何协助他们调试问题?

更新:

我可以毫无问题地将 cURL POST 发送到客户端的 Web 应用程序,只有当我通过 ruby​​ 的 HTTP 库执行它时才会失败

非常感谢 谢谢

最佳答案

我的猜测是您客户的网络应用程序的 SSL 证书有问题。可能存在过期或无效的证书。你可以试试 this answer .

如果你需要解决这个问题(但可能不是一个好的永久解决方案,因为潜在的安全漏洞)你应该能够通过将它放在 Bundler.require 之前来关闭证书验证在你的 application.rb 中:

require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

关于ruby-on-rails - OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: 证书验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33669611/

相关文章:

ruby-on-rails - Rails - 在类实例方法中调用辅助模块方法

ruby-on-rails - 我可以在 Rails 中有一个名为 "Transaction"的模型吗?

ruby-on-rails - 如何公开对在 Heroku 上运行的 node.js 服务器的安全访问?

node.js - 在 node.js 中使用 socket.io 设置服务器-服务器 SSL 通信

web-services - 在 Web 应用程序中使用受 SSL 保护的 Web 服务

ruby - Docker Ruby SSL_connect 返回=1 errno=0 状态=错误 : wrong signature type

ruby - 在法拉第传递 url 参数数组

javascript - 如何在没有原型(prototype)助手的情况下从 Rails Controller 在页面中呈现部分内容

android - HttpClient获取新域名后产生SSLException

ruby-on-rails - 法拉第代理 - 连接失败 - 到达文件末尾