用于保护SOAP Web服务的非对称密钥加密

时间:2012-07-25 19:43:48

标签: ruby-on-rails ruby windows linux encryption-asymmetric

我想在XML请求中使用一些加密标记来验证我的SOAP Web服务的调用者(在Ruby 1.8.7 / Rails 2.3.5中部署,使用Red Hat企业linux 5中的datanoise gem)。通常客户端是一个Windows程序(可能是C#/ .Net windows程序 - 而不是Java / Ruby),它应该在每次调用web服务时根据键/盐生成变化的加密密钥 - 而我的服务器端总是能够用私钥解码它。了解线路上的加密令牌不应允许第三方程序简单地复制完全加密的令牌并访问Web服务。我正在研究OpenSSL,但它是加密技术的新手。为标识加密的字符串可以是(以及其他项目)可信客户端的MAC ID,当被解密时,它将与可信主机的服务器端的存储值匹配。

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

1 个答案:

答案 0 :(得分:0)

由于您在此处对调用者进行身份验证,而不一定只是他们发送的内容,因此无需将身份验证机制放入SOAP请求中。其他人试图用WS-Security来做你想做的事情,所以如果有的话,我会选择那样做。

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

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

请不要发明自己的方案,加密协议是最难解决的问题(这就是为什么WS-Security存在问题),TLS可能就像它现在一样好,它在广泛的支持下任何语言。