2010-12-14 9 views
3

Ich arbeite gegen die Level3 SOAP API. Bis vor Kurzem funktionierte alles wunderbar, als OpenSSL aktualisiert wurde. Hiersslv3 alert unerwartete Nachricht bei der Verwendung von soap4r

ist die vollständige Ausgabe der Fehlermeldung:

OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: sslv3 alert unexpected message): 
    httpclient (2.1.5.2) lib/httpclient/session.rb:247:in `connect' 
    httpclient (2.1.5.2) lib/httpclient/session.rb:247:in `ssl_connect' 
    httpclient (2.1.5.2) lib/httpclient/session.rb:639:in `connect' 
    httpclient (2.1.5.2) lib/httpclient/timeout.rb:128:in `timeout' 
    httpclient (2.1.5.2) lib/httpclient/session.rb:631:in `connect' 
    httpclient (2.1.5.2) lib/httpclient/session.rb:522:in `query' 
    httpclient (2.1.5.2) lib/httpclient/session.rb:147:in `query' 
    httpclient (2.1.5.2) lib/httpclient.rb:953:in `do_get_block' 
    httpclient (2.1.5.2) lib/httpclient.rb:765:in `do_request' 
    httpclient (2.1.5.2) lib/httpclient.rb:848:in `protect_keep_alive_disconnected' 
    httpclient (2.1.5.2) lib/httpclient.rb:764:in `do_request' 
    httpclient (2.1.5.2) lib/httpclient.rb:666:in `request' 
    httpclient (2.1.5.2) lib/httpclient.rb:596:in `post' 
    /Users/glanotte/.rvm/gems/ruby-1.8.7-p302/gems/soap4r-1.5.8/lib/soap/streamHandler.rb:238:in `send_post' 
    /Users/glanotte/.rvm/gems/ruby-1.8.7-p302/gems/soap4r-1.5.8/lib/soap/streamHandler.rb:172:in `send' 
    /Users/glanotte/.rvm/gems/ruby-1.8.7-p302/gems/soap4r-1.5.8/lib/soap/rpc/proxy.rb:179:in `route' 
    /Users/glanotte/.rvm/gems/ruby-1.8.7-p302/gems/soap4r-1.5.8/lib/soap/rpc/proxy.rb:143:in `call' 
    /Users/glanotte/.rvm/gems/ruby-1.8.7-p302/gems/soap4r-1.5.8/lib/soap/rpc/driver.rb:181:in `call' 
    (eval):6:in `validateSLServiceAvailability' 

Der Fehler ist sehr ähnlich der Fehler hier berichtet:

http://dev.ctor.org/http-access2/ticket/223

die Lösung, die die Person, die die oben geöffnet "Ich habe dies behoben, indem ich SSL :: OP_NO_TICKET als Option an SSLConfig übergeben habe." Ich habe versucht, diese durch zu tun:

object = WsdlToRubyPortType.new 
object.options['client.protocol.http.ssl_config.options'] = OpenSSL::SSL::OP_NO_TICKET 

ich folgendes auch versucht haben:

object.options['client.protocol.http.ssl_config.options'] = "OpenSSL::SSL::OP_NO_TICKET" 
object.options['client.protocol.http.ssl_config.options'] = "SSL::OP_NO_TICKET" 

Die Ergebnisse sind identisch, und die Fehlermeldung weiterhin besteht. Ich habe versucht, eine Zeile zu der Soap/Eigenschaftendatei hinzuzufügen, aber es wird nicht als eine gültige Option von dem httpconfloader erkannt.

Jede Hilfe würde sehr geschätzt werden, ich bin völlig fest. Ich denke, die Antwort ist offensichtlich, kann sie aber nicht sehen.

Antwort

0

Am Ende haben wir soap4r fallen lassen, es ist stark veraltet. Das Wechseln von Bibliotheken, obwohl nicht ideal, löste das Problem. Für alle, die ähnliche Probleme haben, empfehle ich, zu savon zu wechseln. Es war eigentlich einfacher, als ich dachte, es

0

Sie müssten die Config auf dem HTTP-Instanz setzen:

http = HTTPClient.new
http.ssl_config.options OpenSSL = :: SSL :: OP_NO_TICKET

+0

So viel hatte ich herausgefunden, der Haken ist die soap4r. Ich hatte gehofft, zu dem http-Objekt zu gelangen, ohne soap4r in die zugrundeliegende http-Instanz zu hacken. Ich kann die anderen ssl config Optionen mit den Methoden, die ich im Text des Tickets erwähnt habe, einstellen. –

0

Es scheint, dass mit dem neuesten Juwel, das ist, wie die Option festgelegt werden kann:

jira.driver.options["protocol.http.ssl_config.options"] = OpenSSL::SSL::OP_NO_TICKET 

wo „jira“ ist eine Instanz einer Klasse JiraTool.

+0

Welches Juwel? Soap4r scheint in den letzten 3 Jahren unverändert zu sein. Dies scheint die gleiche Sache zu sein, die ich versucht habe: 'object = WsdlToRubyPortType.new object.options ['client.protocol.http.ssl_config.options'] = OpenSSL :: SSL :: OP_NO_TICKET' –

0

nur eine Vermutung wäre: Sie müssen möglicherweise zuerst OP_ALL dann angeben, OR in der OP_NO_TICKET Bit:

object = WsdlToRubyPortType.new 
object.options['client.protocol.http.ssl_config.options'] = OpenSSL::SSL::OP_ALL 
object.options['client.protocol.http.ssl_config.options'] |= OpenSSL::SSL::OP_NO_TICKET 

habe nicht getestet.