Web services 安全Web服务:HTTPS上的REST与SOAP+;WS-Security。哪个更好?

Web services 安全Web服务:HTTPS上的REST与SOAP+;WS-Security。哪个更好?,web-services,security,rest,soap,Web Services,Security,Rest,Soap,我无论如何都不是安全专家,但我喜欢创建REST风格的web服务 创建新服务时,需要确保其传输的数据安全。我们已经进入了一场关于哪种方法更安全的辩论——REST使用HTTPS还是SOAP WS使用WS-Security 我的印象是,我们可以对所有web服务调用使用HTTPS,而且这种方法是安全的。我的看法是,“如果HTTPS对银行和金融网站来说足够好,那么对我来说也足够好”。再说一次,我不是这方面的专家,但我认为这些人对这个问题思考得相当认真,并且对HTTPS感到满意 一位同事不同意,他说SOAP

我无论如何都不是安全专家,但我喜欢创建REST风格的web服务

创建新服务时,需要确保其传输的数据安全。我们已经进入了一场关于哪种方法更安全的辩论——REST使用HTTPS还是SOAP WS使用WS-Security

我的印象是,我们可以对所有web服务调用使用HTTPS,而且这种方法是安全的。我的看法是,“如果HTTPS对银行和金融网站来说足够好,那么对我来说也足够好”。再说一次,我不是这方面的专家,但我认为这些人对这个问题思考得相当认真,并且对HTTPS感到满意

一位同事不同意,他说SOAP和WS-Security是唯一的出路

在这个问题上,网络似乎无处不在

也许这里的社区可以权衡每一种方法的利弊?谢谢

见文章:

在点对点情况下,还可以通过使用传输层安全性(TLS),例如通过https发送消息,在Web服务上强制实现机密性和数据完整性

然而,WS-Security解决了更广泛的问题,即在从原始节点发送消息之前保持消息的完整性和机密性,从而提供所谓的端到端安全性

即:

  • HTTPS是一种传输层(点对点)安全机制
  • WS-Security是一种应用层(端到端)安全机制

从技术上讲,您的措辞都不正确,因为SOAP方法的通信不安全,而REST方法没有说明任何有关验证合法用户的内容

HTTPS可防止攻击者破坏两个系统之间的通信。它还验证主机系统(服务器)实际上就是用户打算访问的主机系统

WS-Security防止未经授权的应用程序(用户)访问系统


如果RESTful系统有一种对用户进行身份验证的方法,并且具有WS-Security的SOAP应用程序使用HTTPS,那么实际上两者都是安全的。这只是表示和访问数据的另一种方式

HTTPS确保了消息在网络上的传输安全,并为客户端提供了有关服务器身份的一些保证。这对你的银行或在线股票经纪人来说很重要。他们对验证客户端的兴趣不在于计算机的身份,而在于您的身份。所以卡号、用户名、密码等都是用来认证你的。然后通常会采取一些预防措施,以确保提交的内容没有被篡改,但总的来说,会话中发生的任何事情都被视为是您发起的

WS-Security提供了从消息创建到消息使用的机密性和完整性保护。因此,与其确保通信内容只能由正确的服务器读取,不如确保通信内容只能由服务器上正确的进程读取。与假设安全启动会话中的所有通信都来自经过身份验证的用户不同,每个通信都必须进行签名

这里有一个关于裸体摩托车手的有趣解释:


因此,WS-Security提供了比HTTPS更多的保护,而SOAP提供了比REST更丰富的API。我的观点是,除非您真的需要额外的特性或保护,否则您应该跳过SOAP和WS-Security的开销。我知道这是一种逃避,但关于多少保护是真正合理的(而不仅仅是建造什么才酷)的决定需要由那些密切了解问题的人来做出。

我还没有需要的代表添加评论,或者我会在贝尔的回答中添加这一点。我认为贝尔在总结这两种方法的优缺点方面做得非常好。您可能需要考虑的其他几个因素:

1) 客户机和服务之间的请求是否需要通过需要访问有效负载的中介?如果是这样,那么WS-Security可能更合适

2) 实际上,可以使用SSL,通过一种称为相互身份验证的功能,向服务器提供有关客户端身份的保证。但是,由于配置的复杂性,这在一些非常特殊的场景之外没有太多用处。所以贝尔是对的,WS-Sec更适合这里

3) 通常,SSL的设置和维护(即使在更简单的配置中)会有点困难,这主要是由于证书管理问题。有一个知道如何为你的平台做到这一点的人将是一个巨大的优势

4) 如果您可能需要进行某种形式的凭证映射或身份联合,那么WS-Sec可能值得为此付出代价。并不是说你不能用REST来做这件事,你只是有更少的结构来帮助你

5) 将所有WS-Security问题放到客户端的正确位置可能比您想象的更痛苦


但最终,这确实取决于很多我们不太可能知道的事情。在大多数情况下,我会说这两种方法都“足够安全”,因此这不应该是主要的决定因素。

答案实际上取决于您的具体需求

例如,您是否需要保护您的web消息,或者不需要保密,您只需要验证最终方并确保消息的完整性?如果是这样的话——web服务经常是这样——HTTPS可能是错误的选择

然而,根据我的经验,不要忽视你正在构建的系统的复杂性。不仅HTTPS更容易正确部署,而且依赖传输层安全性的应用程序更容易调试(通过普通HTTP)

祝你好运。

正如你所说,休息吧
Brace yourself, here there's another coming :-)