WCF 传输与消息

Posted

技术标签:

【中文标题】WCF 传输与消息【英文标题】:WCF Transport vs Message 【发布时间】:2011-08-06 02:35:51 【问题描述】:

我正在阅读有关 WCF 安全实现的信息,发现有两种安全类型: Transport Mode and Message Mode (or both)

如果我使用 HTTPS 作为传输模式,如果我也使用消息安全性会更安全吗?我问这个是因为我的理解如下:

https 使用 SSL 协议来加密消息...那我为什么要添加 Message Security 并加密 SSL 加密消息?还是我误会了?

【问题讨论】:

【参考方案1】:

WCF 中的安全性实际上是consists of several features。这两者之间的区别在于消息是如何签名和加密的。

传输安全仅提供点对点通道安全。这意味着HTTPS只在客户端和暴露给客户端的服务器之间建立安全通道。但是如果这个服务器只是一个负载平衡器或反向代理服务器,它可以直接访问消息的内容。

消息安全提供端到端的通道安全。这意味着安全性是传输数据的一部分,只有预期的目的地才能解密数据(负载均衡器或代理只能看到加密的消息)。大多数情况下,消息安全也使用证书来提供加密和签名,但通常速度较慢,因为传输安全可以使用硬件加速。

在高级场景中,这些方法可以组合使用。例如,您可以通过 HTTPS 保护与负载均衡器的通信,因为您在负载均衡器之后信任您的内部网络,但同时您可以对消息进行签名(消息安全),这样您就可以证明它没有被更改。

这两者之间的另一个区别是传输安全性与单一传输协议相关,而消息安全性独立于传输协议。

消息安全基于可互操作的协议(但请注意,并非 WCF 中的每个配置都是可互操作的)。 WCF 至少部分支持这些协议:

WS-Security 1.0 和 1.1 - 加密、签名、令牌传输、时间戳等的基本规则。 用户名令牌配置文件 1.0 - 用于传输用户名和密码的令牌的定义。此规范仅部分实现,因为开箱即用的 WCF 不支持摘要密码,并且需要将此令牌与传输或消息加密一起使用。 X509 令牌配置文件 1.1 - 用于传输证书的令牌定义。 Kerberos 令牌配置文件 1.1 - 用于传输 Kerberos 票证的令牌定义。 SAML 1.1 令牌配置文件 1.0 和 1.1 - 用于联合安全的令牌定义。 SAML 2.0 由 WIF 提供。 WS-SecurityPolicy 1.1 和 1.2 - 支持在 WSDL 中定义安全断言。 WS-SecureConversation 1.3 和 2005 年 2 月 - 支持安全会话,其中仅在第一次调用期间交换凭据,其余通信使用唯一的安全令牌。 WS-Trust 1.3 和 2005 年 2 月 - 为联合方案和安全令牌服务 (STS) 提供支持。

WCF 还支持 WS-I Basic Security Profile 1.0,它只是具有规定配置的以前协议的子集。

对于不可互操作的功能,WCF 提供了诸如 Windows 安全或 TLSNego 和 SPNego 之类的功能(两者通常应该是可互操作的,但它们在许多 SOAP 堆栈中不可用)用于服务凭证交换。

【讨论】:

看来你知道很多WCF,也许你可以帮助我解决this的问题,也许它与你提到的X509令牌配置文件有关,我没有检查。 对不起,我很慢,但在理解跳到跳安全性方面仍有问题,如果您使用传输安全性,是否意味着消息仅在客户端和服务器上是安全的?即消息在传输过程中可能被篡改? @Ladislav Mrnka 你能帮我解决一下this线程 消息是否需要 HTTPS 连接?【参考方案2】:

link 概述了使用或不使用消息安全的原因。

基本上,除非无法使用,否则传输安全性是首选。

链接摘录:

传输级的优缺点 安全

运输安全有以下几点 优点:

不要求 沟通方明白 XML 级别的安全概念。这个可以 提高互操作性,对于 例如,当 HTTPS 用于保护 交流。

总体上提高了性能。

提供硬件加速器。

流媒体是可能的。

运输安全有以下几点 缺点:

仅限跳到跳。

有限且不可扩展的集合 证书。

依赖于传输。

消息级的缺点 安全

消息安全性有以下几点 缺点:

性能

无法使用消息流。

需要实现 XML 级别 安全机制和支持 WS-安全规范。这有可能 影响互操作性。

【讨论】:

您好!有一点我不明白:您说“基本上,除非无法使用,否则首选传输安全性。” - 该声明的依据是什么?提供的链接并没有说明任何内容。【参考方案3】:

在某些情况下,您可能无法进行传输级加密,因此“退回”到消息级加密,这比传输级安全性稍差一些。

当然,两者都做会更安全。但是,当您拥有良好的传输级别安全性时,这有点矫枉过正。

【讨论】:

【参考方案4】:

我想说,在大多数情况下,其中一种就足够了。如果您可以使用更可取的传输级别安全性,因为它会加密整个通信,而不仅仅是消息内容。

【讨论】:

以上是关于WCF 传输与消息的主要内容,如果未能解决你的问题,请参考以下文章

快速入门系列--WCF--07传输安全授权与审核

WCF:使用带有消息契约的流式传输

WCF消息压缩

web service && WCF 学习总结

传输级与消息级安全

使用证书的 WCF 传输安全性忽略链信任