4

我想在 XML 请求中使用一些加密标签来验证我的 SOAP Web 服务的调用者(在 Ruby 1.8.7/Rails 2.3.5 中使用 Red Hat Enterprise linux 5 中的 datanoise gem 部署)。通常,客户端是一个 Windows 程序(可能是 C#/.Net Windows 程序——不是 Java/Ruby),它应该在每次调用基于密钥/盐的 web 服务时生成一个不同的加密密钥——而我的服务器端总是能够用私钥对其进行解码。网络上加密令牌的知识不应允许第三方程序简单地复制完全加密的令牌并访问 Web 服务。我正在研究 OpenSSL,但我是密码学的新手。为识别而加密的字符串可以是(除其他项目外)受信任客户端的 MAC ID,

我在 Ruby 端发现了很多可能性,但理想情况下需要确保该解决方案不会在 Windows 客户端强加(或最小化)任何库或安装要求。我最苦苦挣扎的是一种在每次调用时生成新密钥的方法,这样任何嗅探流量的人都不能简单地通过访问密钥来推断创建加密标签的模式。

4

1 回答 1

0

由于您在这里验证调用者,而不仅仅是他们发送的内容,因此无需将验证机制放入 SOAP 请求中。其他人已尝试使用WS-Security来完成您所追求的事情,所以如果有的话,我会这样做。

尽管该方案的安全性存在问题,但可能最大的交易破坏者是 Ruby 中没有对它的支持(至少我知道,如果我错了,请纠正我!)。

在两端实现客户端身份验证的最简单方法可能是使用相互身份验证的 TLS(以前的 SSL)。这将确保传输级别的身份验证,这在您的情况下就足够了。实际身份验证将首先检查客户端发送的证书的有效性(Ruby OpenSSL 会为您处理),一旦建立,您将根据您维护的已知证书的白名单检查它你的服务器。

请不要发明自己的方案,加密协议是最难解决的问题(这就是 WS-Security 存在问题的原因),TLS 可能和现在一样好,并且它在任何语言中都有广泛的支持。

于 2012-07-28T03:41:36.163 回答