使用Ruby连接到需要用户名,密码和安全证书(.cer文件)连接的Microsoft SOAP Web服务

时间:2012-03-27 17:09:06

标签: c# ruby web-services soap savon

首先是一个小背景:

我已经设法使用C#连接到Microsoft SOAP Web服务。要使用此Web服务,我必须在C#代码中提供用户名和密码。我还必须将安全证书(以.cer格式)安装到系统证书的“根证书颁发机构”部分。该服务的地址是一个安全的“https://”地址。

(顺便说一句,我使用命令行工具“svcutil.exe https://address.of.service”自动为我生成了用于连接服务的C#类。)

以下是我的问题:

如何使用Ruby连接到此Web服务?我不知道从哪里开始。我不知道我的.cer文件,用户名和密码应该在哪里。有什么想法吗?

更多信息:

使用these instructions进行C#,我能够确切地找到发送的XML消息,以及收到的XML消息。这些XML非常简单,但“https://”永远不会出现在它们中,即使Web服务的地址是HTTPS。我不知道为什么会这样。我想从服务发送和接收消息只是与实际 连接 到服务的另一个问题。

2 个答案:

答案 0 :(得分:4)

我可以热烈建议使用Savon来处理Ruby中的SOAP!

我认为它是您正在处理的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

(这只是我的头脑所以可能有点偏离) 阅读我发布的链接,如果你无法弄明白,请告诉我。 :)

证书文件用于您的计算机接受要连接的服务器的标识。如果您已将其安装到计算机上,我认为您不必再​​在该部分执行任何操作。

修改

如果您不能使用WSDL文件,则必须手动构建xml,这非常难看,但如果不是其他方式则可能。 Nokogiri可用于构建xml文档,然后您可以简单地将xml文档POST到正确的URL。我使用httpi-ntlm来处理身份验证方面有很好的经验。

答案 1 :(得分:1)

您在这里谈论的是传输安全性,而不是邮件安全性。您在Windows服务器上安装的证书是用于加密SSL连接的证书。您需要对Ruby进行的操作是确保在建立连接时使用与您安装的证书对应的客户端证书来加密您使用的SSL连接。

这是半服务器管理(SSL证书安装)和一半代码(确保使用正确的证书)。

我不是Ruby专家,但我认为您需要this之类的东西才能在您的连接中使用x509证书。 WCF使用配置文件来执行相同的操作,而传统的ASMX服务使用代码来执行此操作。