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