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

我不是一个安全专家,但我喜欢创buildREST风格的Web服务。

在创build一个新的服务需要有它的数据传输安全。 我们已经进入了一个关于哪种方法更安全的争论,即使用HTTPS的REST或使用WS-Security的SOAP WS。

我觉得我们可以在所有的Web服务调用中使用HTTPS,这种方法是安全的。 我的看法是,“如果HTTPS足够适合银行和金融网站,对我来说就够了”。 再次,我不是这方面的专家,但是我认为这些人对这个问题已经有了相当的认识,并且对HTTPS感到满意。

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

networking似乎在这个全面的。

也许这里的社区可以权衡每个人的利弊呢? 谢谢!

HTTPS通过networking保证消息的传输,并向客户端提供关于服务器身份的一些保证。 这对您的银行或在线股票经纪商来说很重要。 他们对客户进行身份validation的兴趣不在于电脑的身份,而在于您的身份。 所以使用卡号,用户名,密码等来validation你的身份。 然后通常会采取一些预防措施,以确保提交文件没有被篡改,但总体来说,会话​​中发生的任何事情都被视为由您发起。

WS-Security提供保密性和完整性保护,从创build消息到消费。 因此,不要确保通信的内容只能被正确的服务器读取,而是确保只能通过服务器上的正确进程读取。 不要假设安全启动的会话中的所有通信都来自已authentication的用户,每个用户都必须签名。

这里有一个有趣的解释,涉及裸体电单车司机:

http://blogs.msdn.com/vbertocci/archive/2005/04/25/end-to-end-security-or-why-you-shouldn-t-drive-your-motorcycle-naked.aspx

所以WS-Security提供了比HTTPS更多的保护,SOAP提供了比REST更丰富的API。 我的意见是,除非你真的需要额外的function或保护,否则你应该跳过SOAP和WS-Security的开销。 我知道这是一个阴谋,但是关于多less保护实际上是合理的(不仅仅是build立起来会是一件很酷的事情)的决定需要那些密切了解问题的人做出。

REST安全性依赖于传输,而SOAP安全性则不依赖于传输。

REST从底层传输中inheritance安全措施,而SOAP则通过WS-Security定义自己的安全措施。

当我们谈论REST时,通过HTTP – 应用HTTP的所有安全措施都被inheritance,这被称为传输级安全性。

传输级别的安全性,只有当它在networking上的时候才保证你的信息 – 只要它离开线路,信息就不再安全。

但是,使用WS-Security,其消息级安全 – 即使消息离开传输通道,它仍然会受到保护。 另外 – 消息级别的安全性,你可以部分encryption消息[不是整个消息,但只有你想要的部分] – 但传输级别的安全性,你不能这样做。

WS-Security具有authentication,完整性,机密性和不可否认性的措施,而SSL不支持不可否认性(采用双腿OAuth)。

在性能方面,SSL比WS-Security要快得多。

谢谢…

从技术上讲,它的措辞是不正确的,因为SOAP方法的通信是不安全的,REST方法没有说明对合法用户进行身份validation的任何事情。

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

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

如果一个RESTful系统有一种validation用户身份的方法,而且一个使用WS-Security的SOAP应用程序正在使用HTTPS,那么两者都是安全的。 这只是一种呈现和访问数据的不同方式。

请参阅wiki文章:

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

然而,WS-Security解决了维持消息的完整性和机密性这个更广泛的问题,直到从始发节点发送消息之后,提供所谓的端到端安全性。

那是:

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

正如你所说,REST对银行来说足够好,所以对你来说应该足够好。

安全有两个主要方面:1)encryption和2)身份。

使用SSL / HTTPS传输可通过线路提供encryption。 但是,您还需要确保两台服务器都可以确认他们知道他们在说什么。 这可以通过SSL客户端证书,共享秘密等

我确信可以说SOAP是“更安全的”,但可能没有任何重大的意义。 裸体摩托车手比喻是可爱的,但如果准确的话就意味着整个互联网是不安全的。

我还没有需要添加评论的代表,或者我只是把这个添加到贝尔的答案。 我认为贝尔在总结两种方法的最高级别利弊方面做得非常好。 其他几个你可能要考虑的因素:

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

2)实际上可以使用SSL来使用称为相互authentication的function向服务器提供关于客户身份的保证。 然而,由于configuration的复杂性,这在一些非常特殊的场景之外并没有得到太多的使用。 所以贝尔是正确的,在这里WS-Sec更合适。

3)一般来说,由于证书pipe理问题,安装和维护SSL(即使是在更简单的configuration中)也可能有点麻烦。 有一个知道如何为你的平台做这个的人会是一个很大的优势。

4)如果您可能需要做某种forms的凭证映射或联合身份validation,那么WS-Sec可能是值得的。 不是说你不能用REST来做这件事,你只需要更less的结构来帮助你。

5)让所有的WS-Security goop进入客户端的正确位置可能比你想象的更痛苦。

最后,尽pipe它确实取决于很多我们不太可能知道的事情。 对于大多数情况下,我会说任何一种方法都是“足够安全”的,所以不应该成为主要的决定因素。

Brace yourself, here there's another coming :-) 

今天,我不得不向我的女朋友解释WS-Security的expression能力与HTTPS的区别。 她是一名计算机科学家,所以即使她不知道她所理解的(也许比我更好)所有的XML mumbo jumbo是什么encryption或签名手段。 然而,我想要一个强大的形象,这可以让她真正理解什么是有用的,而不是如何实现(稍后,她没有逃脱:-))。

所以它是这样的。 假设你是赤裸裸的,你必须把你的摩托车送到某个目的地。 在(A)的情况下,你会经历一个透明的隧道:你唯一的希望不要因为猥亵行为而被捕,那就是没人在看。 这不完全是你可以提出的最安全的策略…(注意人前额上的汗滴:-))。 这相当于一个明确的职位,当我说“相当于”我的意思是。 在(B)情况下,你的情况会更好。 隧道是不透明的,所以只要你进入它,你的公共logging是安全的。 但是,这仍然不是最好的情况。 你仍然要离开家,到达隧道入口,一旦走到隧道外面,你可能不得不下车,走到某个地方……那就是HTTPS。 诚然,您的信息在跨越最大的鸿沟时是安全的,但是一旦您将信息传递到另一端,您就不会知道在达到数据处理的真正点之前,需要经过多less阶段。 当然,所有这些阶段都可以使用与HTTP不同的东西:例如,经典的MSMQcaching不能立即提供服务的请求。 如果有人在处理这个预处理过程中潜伏着你的数据,会发生什么? 嗯。 (把这个“hm”看成​​是Morpheus在句尾说的那个“你认为这是你呼吸的空气吗?”)。 在这个比喻中的完整解决scheme(c)是痛苦的微不足道的:给自己穿一些衣服,特别是摩托车上的头盔! 所以你可以安全地四处走动,而不必依赖环境的不透明。 这个比喻是希望清楚的:衣服是随你而来的,无论平均水平还是周围的基础设施,就像邮件的安全水平一样。 此外,你可以决定覆盖一个部分,但揭示另一个部分(你可以做个人的基础上:机场安全可以让你的外套和鞋子,而你的医生可能有一个更高的访问级别),但请记住,短袖衬衫是不好的做法,即使你为你的二头肌感到自豪:-)(更好的马球,或T恤)。

我很高兴地说,她明白了! 我不得不说,这个衣服比喻非常强大:我很想用它来介绍政策的概念(迪斯科俱乐部不会让你穿着运动鞋;你不能去内裤的银行取钱,虽然这是完全可以接受的外观,同时平衡自己在冲浪等),但我认为,一个下午就足够了;-)

build筑学 – WS,狂想

礼貌: http : //blogs.msdn.com/b/vbertocci/archive/2005/04/25/end-to-end-security-or-why-you-shouldn-t-drive-your-motorcycle-naked。 ASPX

我每天都在这个领域工作,所以我想总结一下这方面的好评,

SSL(HTTP / s)只是一个层面,确保:

  1. 被连接的服务器提供certificate其身份的证书(尽pipe这可以通过DNS中毒来欺骗)。
  2. 通信层被encryption(不窃听)。

WS-Security和相关标准/实现使用PKI:

  1. certificate客户的身份。
  2. certificate消息未被修改在途(MITM)。
  3. 允许服务器authentication/授权客户端。

最后一点对于服务请求很重要,因为客户端(调用者)的身份对于知道他们应该被授权从服务接收这样的数据是极为重要的。 标准的SSL是单向的(服务器)authentication,并且不识别客户端。

答案实际上取决于你的具体要求。

例如,您是否需要保护您的Web消息或不需要保密,您所需要的只是validationterminal方并确保消息的完整性? 如果是这种情况 – 通常是使用networking服务 – HTTPS可能是错误的锤子。

但是,从我的经验来看,不要忽视你正在构build的系统的复杂性。 不仅HTTPS更容易正确部署,而且依赖传输层安全的应用程序更易于debugging(通过普通的HTTP)。

祝你好运。

如果您的RESTFul调用在HTTP请求的Html主体中来回发送XML消息,那么您应该能够在使用任何安全function的同时,在XML消息中拥有WS-Security的所有好处,例如XMLencryption,证书等可以从http获得,例如SSL / TLSencryption。

基于HTTPS的REST只要API提供者实现对服务器端的授权,应该是一个安全的方法。 在一个Web应用程序的情况下,我们所做的是通过HTTPS和一些authentication/授权访问一个Web应用程序,传统的Web应用程序没有安全问题,然后Restful API也可以解决安全问题没有问题!