Ruby SOAP::RPC::Driver SSL_connect returned=1 errno=0 state=error: certificate verify failed 如何解决?

mapana · 2017年01月05日 · 最后由 mapana 回复于 2017年01月05日 · 2205 次阅读

环境:

rails 4.2.6
ruby 2.3.0

系统:

deepin

Gem:

soap4r

代码:

driver = SOAP::RPC::Driver.new("https://xxx")
driver.add_method('method', 'value1', 'value2', 'value3')
driver.method(value1, value2, value3)

异常:

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

我想要跳过证书的验证,试过 google 很多方式无果...,请各位大神指教!

尝试使用

driver.options['protocol.http.ssl_config.ca_file']  = nil
driver.options['protocol.http.ssl_config.verify_mode']  = OpenSSL::SSL::VERIFY_NONE
or
driver.options['protocol.http.ssl_config.verify_mode']  = nil

依然没有解决...

最后使用使用 HTTP 模拟 SOAP 发送 XML 的过程,然后让 HTTP 跳过证书验证后解决次问题!

param = "your xml to string"
uri = URI.parse("https://xxx")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true if uri.scheme == "https"
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
http.start {
  http.request_post(uri, params) {|res|
    print res.body
  }
}

域名给出来,不给怎么查问题是谁的!

Ruby 需要正确安装 OpenSSL,所以建议用 ruby-build 或 RVM 安装 Ruby,否则很容易遇到 SSL 的问题

#1 楼 @huacnlee 已修改,ruby 是使用的 rvm 安装。

你一个 IP 的网站请求怎么可能通过 SSL 验证呢!

对方是谁?自己的服务还是别人的?要么搞个域名正确配置好 SSL,要么去掉 SSL,这样子的设计结果你用一些 skip ssl 验证的方式,那等于没有 SSL

#3 楼 @huacnlee 也许就是自己内部服务的接口,有传输层加密好过没有,只是不校验证书正确性。

#3 楼 @huacnle 感谢你的回答,这是别人的服务器,我只能遵循他的玩法,所以我放弃 SOAP 用了 Net::HTTP 忽略证书验证来解决证书的问题。

是的,这个还只是内部调试用的。

mapana 关闭了讨论。 01月05日 13:39
需要 登录 后方可回复, 如果你还没有账号请 注册新账号