Ruby SOAP 1.9在自签名服务器上失败

时间:2013-10-15 13:51:47

标签: ruby soap ruby-1.9.3

我正在将一段代码从Ruby 1.8.7移植到Ruby 1.9.3,它充当SOAP客户端。客户端与使用自签名证书的服务器(在这种情况下在同一台机器上)进行通信,但每当我执行SOAP调用时,它都会失败并显示OpenSSL::SSL:SSLError

/root/.rvm/gems/ruby-1.9.3-p448/gems/httpclient-2.3.4.1/lib/httpclient/session.rb:303:
in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B:
certificate verify failed (OpenSSL::SSL::SSLError)

我已经尝试通过gem安装soap4r(我然后had to hack以正确地要求它)。我也试过安装spox repo版本,因为其他SO问题建议:

mkdir -pv ${APPSCALE_HOME}/downloads
cd ${APPSCALE_HOME}/downloads
git clone https://github.com/spox/soap4r-spox.git
cd soap4r-spox
ruby setup.rb all
cd ..
rm -rf soap4r-spox

同样的问题也失败了。我在Ubuntu Precise上,所以我尝试通过apt和via RVM安装Ruby 1.9.3,这也有同样的问题。最后,由于我有RVM,我也尝试使用Ruby 2.0.0,它也有同样的问题。

我可以很好地连接到其他网站(例如google,rubygems),所以它看起来不像我见过的其他报告关于他们的证书在Ruby无法看到它的地方。有任何想法吗?当然,我正在使用的代码(为了便于阅读而被截断):

require 'openssl'
require 'soap/rpc/driver'

class UserAppClient
  attr_reader :conn, :ip, :secret


  # The port that the UserAppServer binds to, by default.
  SERVER_PORT = 4343


  def initialize(ip, secret)
    @ip = ip
    @secret = secret

    @conn = SOAP::RPC::Driver.new("https://#{@ip}:#{SERVER_PORT}")
    @conn.add_method("get_all_apps", "secret")
  end

  def get_all_apps(retry_on_except=true)
    all_apps = @conn.get_all_apps(@secret)
    app_list = all_apps.split(":")
    app_list = app_list - [app_list[0]] # first item is a dummy value
    return app_list
  end
end

0 个答案:

没有答案