sslv3 оповещает о неожиданном сообщении при использовании soap4r - PullRequest
3 голосов
/ 14 декабря 2010

Я работаю против SOAP API уровня 3.Все работало замечательно до недавнего времени, когда OpenSSL был обновлен.

Вот полный вывод сообщения об ошибке:

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'

Ошибка очень похожа на ошибку, сообщенную здесь:

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

решение, которое открыл человек, описавший выше: «Я исправил это, передав SSL :: OP_NO_TICKET в качестве опции для SSLConfig».Я попытался сделать это следующим образом:

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

Я также попробовал следующее:

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"

Результаты идентичны, и сообщение об ошибке сохраняется.Я попытался добавить строку в файл soap / property, но httpconfigloader не признал ее допустимой.

Любая помощь будет принята с благодарностью, я полностью застрял.Я чувствую, что ответ очевиден, но не вижу его.

Ответы [ 4 ]

0 голосов
/ 08 июля 2016

Просто предположение: вам может понадобиться сначала указать OP_ALL, а затем OR в бите 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

Не проверял это.

0 голосов
/ 13 июня 2011

Кажется, что с последней версией драгоценного камня, вот как можно установить опцию:

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

где "jira" - это экземпляр класса JiraTool.

0 голосов
/ 09 января 2012

Мы закончили тем, что бросили soap4r, это сильно устарело. Переключение библиотек, хотя и не идеальное, решило проблему. Для тех, кто сталкивается с проблемами, подобными этому, я рекомендую переключиться на savon . Это было на самом деле проще, чем я думал, это будет

0 голосов
/ 20 декабря 2010

Вам необходимо установить конфигурацию для экземпляра HTTP:

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

...