Использование Ruby для подключения к веб-службе Microsoft SOAP, для подключения к которой требуется имя пользователя, пароль и сертификат безопасности (файл .cer).

Сначала небольшая предыстория:

Мне уже удалось подключиться к веб-службе Microsoft SOAP с помощью С#. Чтобы использовать эту веб-службу, я должен указать имя пользователя и пароль в коде C#. Я также должен установить сертификат безопасности (в формате .cer) в раздел «Корневые центры сертификации» системных сертификатов. Адрес сервиса — безопасный адрес «https://».

(Кстати, класс C#, который я использую для подключения к сервису, был автоматически создан для меня с помощью инструмента командной строки «svcutil.exe https://address.of.service")

Вот мой вопрос:

Как я могу подключиться к этому веб-сервису с помощью Ruby? Я даже не знаю, с чего начать. Я не знаю, куда именно должны идти мой файл .cer, имя пользователя и пароль. Любые идеи?

Дополнительная информация:

Используя эти инструкции для C#, я смог найти точно определить, какое XML-сообщение отправлено и какое XML-сообщение получено обратно. Эти XML-файлы довольно просты, но в них никогда не встречается «https://», хотя адрес веб-службы — HTTPS. Я не уверен, почему это так. Я полагаю, что отправка и получение сообщений от службы — это отдельный вопрос от фактического подключения к службе.


person Enchilada    schedule 27.03.2012    source источник
comment
Можете ли вы опубликовать адрес в wsdl или его суть / пасту?   -  person rubiii    schedule 27.03.2012
comment
@rubiiii К сожалению, я не могу опубликовать это публично...   -  person Enchilada    schedule 29.03.2012
comment
@Enchilada: Можете ли вы предоставить другой веб-сервис, который показывает такое же поведение?   -  person Niklas B.    schedule 29.03.2012
comment
@НикласБ. & rubii & все остальные: К сожалению, я не знаю другого такого сервиса. Я предполагаю, что это трудная ситуация тогда. Можно ли кому-нибудь из вас отправить электронное письмо для частного обсуждения? Возможно какая-то консультационная работа...   -  person Enchilada    schedule 30.03.2012
comment
@Enchilada: Вероятно, было бы полезно, если бы вы включили основной код C # и, возможно, дамп связи между клиентом и сервером. Конечно, вы не можете ожидать идеальных ответов, если код нельзя протестировать.   -  person Niklas B.    schedule 30.03.2012


Ответы (2)


Я настоятельно рекомендую использовать Savon для работы с SOAP в Ruby!

Я предполагаю, что вы имеете дело с базовой аутентификацией HTTP, в этом случае она должна быть довольно простой. Просто:

client = Savon::Client.new do
  http.auth.basic "user_name", "password"

  # Use a local wsdl
  wsdl.document = File.expand_path("../wsdl/ebay.xml", __FILE__)
  # or from internet
  wsdl.document = "http://service.example.com?wsdl"

  # to list SOAP actions
  client.wsdl.soap_actions
end

(это просто из моей головы, так что это может быть немного не так) Прочтите ссылку, которую я разместил, и msg мне, если вы не можете понять это. :)

Файл сертификата используется для того, чтобы ваш компьютер принял идентификатор сервера, к которому вы хотите подключиться. Если вы установили его на свой компьютер, я не думаю, что вам нужно делать что-то еще в этой части.

ИЗМЕНИТЬ

Если вы не можете использовать файл WSDL, вам придется создавать xml вручную, это довольно некрасиво, но возможно, если другого пути нет. Nokogiri можно использовать для создания XML-документа, тогда вы можете просто отправить XML-документ на правильный URL-адрес. У меня есть хороший опыт использования httpi-ntlm для аутентификации.

person Björn Nilsson    schedule 29.03.2012
comment
Похоже, возникла проблема с анализом файла WSDL. Это немного странный файл — он ссылается на некоторые другие файлы WSDL в других местах https. Все другие синтаксические анализаторы wsdl (кроме материалов Microsoft), такие как php и какао, также не работают, и я думаю, что это из-за странности этого файла WSDL. - person Enchilada; 30.03.2012
comment
Поэтому: не могли бы вы добавить к своему ответу, как я сначала подключаюсь к службе, а затем просто отправляю в нее необработанный XML-запрос и получаю от него необработанный XML-запрос? Это может быть для меня здесь, если я не могу проанализировать WSDL (за пределами Microsoft .NET). - person Enchilada; 30.03.2012
comment
Я обновил свой ответ. Просто из любопытства, с какой службой вы разговариваете? - person Björn Nilsson; 31.03.2012

Здесь вы говорите о безопасности транспорта, а не о безопасности сообщений. Сертификат, который вы установили на сервер Windows, используется для шифрования соединения SSL. Что вам нужно сделать с Ruby, так это убедиться, что при установлении соединения сертификат клиента, соответствующий установленному вами сертификату, используется для шифрования используемого вами SSL-соединения.

Это наполовину управление сервером (установка SSL-сертификата) и наполовину код (убедитесь, что вы используете правильный сертификат).

Я не эксперт по Ruby, но думаю, вам понадобится что-то вроде это, чтобы использовать сертификат x509 в вашем соединении. WCF использует файл конфигурации, чтобы сделать то же самое, в то время как традиционные службы ASMX используют для этого код.

person CodeMonkey1313    schedule 05.04.2012
comment
Вы доступны в частном порядке, чтобы помочь мне подключиться к услуге? Как я мог связаться с вами? - person Enchilada; 12.04.2012