2010-12-14 47 views
3

Je travaille sur l'API SOAP level3. Tout fonctionnait merveilleusement jusqu'à récemment quand OpenSSL a été mis à jour.sslv3 message inattendu lors de l'utilisation de soap4r

est ici la sortie complète du message d'erreur:

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' 

L'erreur est très similaire à l'erreur signalée ici:

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

la solution que la personne qui a ouvert ce qui précède était "J'ai corrigé ce problème en transmettant SSL :: OP_NO_TICKET en tant qu'option à SSLConfig." Je l'ai essayé de le faire par:

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

J'ai essayé ce qui suit ainsi:

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" 

Les résultats sont identiques et le message d'erreur persiste. J'ai essayé d'ajouter une ligne au fichier soap/property mais il n'est pas reconnu comme une option valide par le httpconfigloader.

Toute aide serait grandement appréciée, je suis complètement coincé. Je pense que la réponse est évidente mais ne peut pas le voir.

Répondre

0

Nous avons fini par laisser tomber soap4r, il est très obsolète. Commutation de bibliothèques, bien que pas idéal, a résolu le problème. Pour toute personne rencontrant des problèmes similaires, je recommande de passer à savon. Il était plus facile que je pensais que ce serait

0

Vous devez définir la configuration de l'instance HTTP:

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

+0

Ce que j'avais compris, c'est le soap4r. J'avais espéré arriver à l'objet http sans pirater soap4r à l'instance http sous-jacente. Je suis capable de définir les autres options de configuration ssl en utilisant les méthodes que j'ai mentionnées dans le texte du ticket. –

0

Il semble que le dernier bijou, voici comment l'option peut être réglée:

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

où « JIRA » est une instance d'une classe JiraTool.

+0

Quelle gemme? Soap4r semble être inchangé depuis 3 ans. Cela semble être la même chose que j'ai essayé: 'object = WsdlToRubyPortType.new object.options ['client.protocol.http.ssl_config.options'] = OpenSSL :: SSL :: OP_NO_TICKET' –

0

Juste une supposition: vous devrez peut-être d'abord spécifier OP_ALL puis OR dans le bit OP_NO_TICKET:

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 

ai pas testé.