1

SOAP クライアントとして機能するコードを Ruby 1.8.7 から Ruby 1.9.3 に移植しています。クライアントは、自己署名証明書を使用するサーバー (この場合は同じマシン上) と通信しますが、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)

私は宝石を介してsoap4rをインストールしようとしました(それを正しく要求するためにハックする必要がありました)。他のSOの質問が示唆するように、spoxレポバージョンのインストールも試みました:

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および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
4

0 に答える 0