2008-10-14 7 views
1

J'ai un client SOAP dans Ruby que j'essaye de travailler avec un serveur SOAP Ruby, mais en vain. Le client fonctionne bien sur SSL avec un serveur SOAP Python, mais pas avec la version Ruby. Voici ce que le serveur ressemble:Ruby SOAP SSL Woes

require 'soap/rpc/standaloneServer' 
require 'soap/rpc/driver' 
require 'rubygems' 
require 'httpclient' 

def cert(filename) 
    OpenSSL::X509::Certificate.new(File.open("path to cert.cert") { |f| 
    f.read 
    }) 
end 

def key(filename) 
    OpenSSL::PKey::RSA.new(File.open("path to rsaprivate.key") { |f| 
    f.read 
    }) 
end 

class Server < SOAP::RPC::HTTPServer 
~code snipped for readability~ 
end 

server = Server.new(:BindAddress => HelperFunctions.local_ip, :Port => 1234, :SSLCertificate => cert("path to cert"), :SSLPrivateKey => key("path to rsa private key")) 
new_thread = Thread.new { server.start } 

J'ai parés une partie du code pour des raisons de lisibilité (par exemple, j'ai quelques méthodes là, j'expose) et il fonctionne très bien avec SSL off. Mais lorsque le client tente de se connecter, il voit ceci:

warning: peer certificate won't be verified in this SSL session 
/usr/lib/ruby/1.8/net/http.rb:567: warning: using default DH parameters. 
/usr/lib/ruby/1.8/net/http.rb:586:in `connect': unknown protocol (OpenSSL::SSL::SSLError) 

J'ai essayé de prendre quelques conseils de this post et maintenant je vois ce message:

/usr/lib/ruby/1.8/soap/httpconfigloader.rb:64:in `set_ssl_config': SSL not supported (NotImplementedError) 

Toutes les idées sur la façon de résoudre ce problème serait grandement apprécié.

+0

J'ai le même problème, mais pour un client. J'ai essayé 'require 'webrick/https'' en vain. Avez-vous eu du succès côté client? –

Répondre

2

Arg. Je suis en train de suivre this link et il se trouve que je manquais d'une simple déclaration include:

require 'webrick/https' 

Cela, combiné à l'aide du lien dans la question initiale permet de résoudre le problème. Espérons que cela sauve quelqu'un d'autre la ligne d'une heure de la douleur :)

0

Moi aussi .. et ne pas oublier de mettre le: SSLEnable => true couple d'heures passent en pensant que des ...

server = Server.new(:BindAddress => HelperFunctions.local_ip, :Port => 1234, :SSLEnable => true, :SSLCertificate => cert("path to cert"), :SSLPrivateKey => key("path to rsa private key")) 
1

"SSL non pris en charge" peut être dû au fait que httpclient n'est pas installé.