[WCF安全系列]绑定、安全模式与客户端凭证类型:NetNamedPipeBinding、NetTcpBinding与NetMsmqBinding

在前面两篇(《绑定、安全模式与客户端凭证类型:BasicHttpBinding》和《绑定、安全模式与客户端凭证类型:WSHttpBinding与WSDualHttpBinding》)中,我们详细地介绍了四种基于HTTP的绑定分别支持的安全模式,已经在相应的安全模式下可以采用怎样的客户端凭证。在本篇文章中,我们安全线相同的方式来介绍三种基于局域网的绑定,即NetNamedPipeBinding、NetTcpBinding与
NetMsmqBinding。

一、NetNamedPipeBinding

NetNamedPipeBinding只能用于同一台机器上的不同进程之间的通信(IPC:Inter-Process

Communication)。在IPC这样的通信场景下,根本不需要基于Message模式的安全。所以在表示NetNamedPipeBinding安全的NetNamedPipeSecurity类型中,表示支持的安全模式的Mode属性对应的NetNamedPipeSecurityMode枚举仅仅具有两个选项:None和Transport。在默认的情况下,NetNamedPipeBinding采用Transport安全模式。

此外还有一点值得一提:表示Transport模式安全的NamedPipeTransportSecurity类并不存在ClientCredentialType属性,因为它总是采用Windows作为其客户端凭证。NetNamedPipeBinding安全相关的应用编程接口如下面的代码片断所示。

   1: public class NetNamedPipeBinding : Binding, IBindingRuntimePreferences
   2: {
   3:     //其他成员
   4:     public NetNamedPipeSecurity Security { get; set; }
   5: }
   6: public sealed class NetNamedPipeSecurity
   7: {
   8:     //其他成员
   9:     public NetNamedPipeSecurityMode Mode { get; set; }
  10:     public NamedPipeTransportSecurity Transport { get; set; }
  11: }
  12: public enum NetNamedPipeSecurityMode
  13: {
  14:     None,
  15:     Transport
  16: }
  17: public sealed class NamedPipeTransportSecurity
  18: {
  19:    //不存在ClientCredentialType属性
  20: }

二、NetTcpBinding

较之NetNamedPipeBinding,NetTcpBinding涉及安全相关的定义就要复杂一些。Security属性返回的是一个用于设置NetTcpBinding安全的NetTcpSecurity对象。表示安全模式的NetTcpSecurity的Mode属性返回的是我们提到过的SecurityMode枚举,意味着NetTcpSecurity和WSHttpBinding以及WS2007HttpBinding支持相同的安全模式集,即None、Transport、Message和Mixed(TransportWithMessageCredential)。在默认的情况下,NetTcpBinding采用Transport安全模式。

NetTcpSecurity的Transport属性返回的是一个用于进行Transport安全设置的TcpTransportSecurity类型对象。TcpTransportSecurity的ClientCredentialType属性以TcpClientCredentialType枚举的形式表示采用的客户端凭证类型。定义在TcpClientCredentialType中的三个枚举值表示NetTcpBinding在Transport模式下支持的所有客户端凭证类型:None、Windows和Certificate。在默认的情况下,NetTcpBinding采用Windows凭证。

而通过Message属性返回的用于进行Message安全设置的则是一个MessageSecurityOverTcp类型对象。MessageSecurityOverTcp用于表示客户端凭证类型的ClientCredentialType属性的依然是MessageCredentialType,意味着NetTcpBinding和上述的三个WS绑定在Message模式下,具有相同的客户端凭证集。在默认的情况下,NetTcpBinding采用Windows凭证。NetTcpBinding安全相关的应用编程接口如下面的代码片断所示。

   1: public class NetTcpBinding : Binding, IBindingRuntimePreferences
   2: {
   3:     //其他成员
   4:     public NetTcpSecurity Security { get;set}
   5: }
   6: public sealed class NetTcpSecurity
   7: {  
   8:     //其他成员
   9:     public SecurityMode Mode {  get; set; }
  10:     public TcpTransportSecurity Transport { get;  set; }
  11:     public MessageSecurityOverTcp Message { get; set; }
  12: }
  13: public sealed class TcpTransportSecurity
  14: {    
  15:     //其他成员
  16:     public TcpClientCredentialType ClientCredentialType { get; set; }
  17: }
  18: public sealed class MessageSecurityOverTcp
  19: {    
  20:     //其他成员
  21:     public MessageCredentialType ClientCredentialType { get; set; }
  22: }
  23: public enum TcpClientCredentialType
  24: {
  25:     None,
  26:     Windows,
  27:     Certificate
  28: }

三、NetMsmqBinding

NetMsmqBinding的Security属性的类型为NetMsmqSecurity。而表示NetMsmqBinding采用的安全模式的Mode属性返回一个NetMsmqSecurityMode枚举。NetMsmqSecurityMode枚举的定义反映了NetMsmqBinding支持的安全模式集与其它系统定义绑定都不太一样。定义在NetMsmqSecurityMode的四个枚举值反映了NetMsmqBinding支持的四种安全模式:None、Transport、Message和Both。

首先,NetMsmqBinding具有 一种独有的安全模式Both。这种模式意味中同时采用Transport和Message,就像是加上了双保险。有人可能会提出这样的问题:如果同时采用Transport和Message两种模式,性能岂不是会变得很差?但是,由于MSMQ总是采用一种单向(One-Way)或者异步的消息发送机制,对性能并没有太高的要求。此外,NetMsmqBinding并不支持Mixed(TransportWithMessageCredential)。在默认的情况下,NetMsmqBinding采用Transport安全模式。

通过NetMsmqSecurity的Transport属性返回的用于进行Transport安全设置的是一个类型为MsmqTransportSecurity的对象。和NetNamedPipeBinding类似,MsmqTransportSecurity并没有一个ClientCredentialType属性。这是因为在Transport模式下,NetMsmqBinding总是采用Windows凭证。而通过用于进行Message安全设置的Message属性对应的类型为MessageSecurityOverMsmq。MessageSecurityOverMsmq具有一个类型为MessageCredentialType的ClientCredentialType属性。NetMsmqSecurity安全相关的应用编程接口定义反映在下面的代码片断中。

   1: public class NetMsmqBinding : MsmqBindingBase
   2: {    
   3:     //其他成员
   4:     public NetMsmqSecurity Security {get; set; }
   5: } 
   6: public sealed class NetMsmqSecurity
   7: {    
   8:     //其他成员
   9:     public NetMsmqSecurityMode Mode {  get; set; }
  10:     public MsmqTransportSecurity Transport { get; set; }
  11:     public MessageSecurityOverMsmq Message { get; set; }
  12: }
  13: public enum NetMsmqSecurityMode
  14: {
  15:     None,
  16:     Transport,
  17:     Message,
  18:     Both
  19: }
  20: public sealed class MsmqTransportSecurity
  21: {
  22:     //不存在ClientCredentialType属性
  23: }
  24:  
  25: public sealed class MessageSecurityOverMsmq
  26: {
  27:     //其他成员
  28:     public MessageCredentialType ClientCredentialType {get; set; }
  29:  }

作者:蒋金楠
微信公众账号:大内老A
微博:www.weibo.com/artech
如果你想及时得到个人撰写文章以及著作的消息推送,或者想看看个人推荐的技术资料,可以扫描左边二维码(或者长按识别二维码)关注个人公众号(原来公众帐号蒋金楠的自媒体将会停用)。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文链接

时间: 2024-11-05 04:53:25

[WCF安全系列]绑定、安全模式与客户端凭证类型:NetNamedPipeBinding、NetTcpBinding与NetMsmqBinding的相关文章

[WCF安全系列]绑定、安全模式与客户端凭证类型:总结篇

对于常用的几种绑定类型,它们都支持怎样的安全模式,以及针对各种安全模式可以采用怎样的认证方式(通过客户端凭证类型决定),这些都在前面的一系列文章中进行了详细的介绍.接下来我们通过表格的形式对不同类型的系统预定义对不同的安全模式进行一下总结. 一.系统预定义绑定对不同安全模式的支持 下面的表格表示系统预定义绑定对不同安全模式的支持(WSHttpBinding与WS2007HttpBinding具有相同的安全模式支持策略,这里仅仅列出了WSHttpBinding). BasicHttp Bindin

[WCF安全系列]绑定、安全模式与客户端凭证类型:WSHttpBinding与WSDualHttpBinding

在上一篇文章中,我们详细地介绍了BasicHttpBinding具有怎样的安全模式的支持,已经在各种安全模式下分别可以采用怎样的客户端凭证.接下来我们来进一步分析另外三个基于HTTP的绑定,即WSHttpBinding.WS2007HttpBinding和WSDualHttpBinding.考虑到它们之间在安全设置方面的相关性,在这里我们先来介绍WSDualHttpBinding. 一.WSDualHttpBinding 我们在前面提到过,WCF所有基于HTTP的绑定的Transport安全模式

[WCF安全系列]绑定、安全模式与客户端凭证类型:BasicHttpBinding

整个安全传输是在WCF的信道层进行的,而绑定是信道层的缔造者,所以终结点采用哪种类型的绑定以及对绑定的属性进行怎样的设置决定了信道层最终采用何种机制实现消息的安全传输.具体来说,我们可以通过绑定设置最终采用的安全模式,以及基于相应安全模式下进行认证和消息保护的行为. 一.Binding安全相关的应用编程接口 不同的绑定类型由于其采用的传输协议不同,应用的场景也各有侧重,很难提供一种统一的应用编程接口完成基于不同绑定的安全设置,所以每一种绑定都具有各自用于安全设置相关的类型.但是基于对安全的设置,

[WCF安全系列]服务凭证(Service Credential)与服务身份(Service Identity)

在采用TLS/SSL实现Transport安全的情况下,客户端对服务证书实施认证.但是在默认情况下,这种认证仅仅是确保服务证书的合法性(通过数字签名确保证书确实是由申明的CA颁发)和可信任性(证书或者CA证书存储于相应的可信赖存储区).而WCF提供服务证书并不限于此,客户端对服务认证的模式应该是这样的:服务端预先知道了服务的身份,在进行服务调用之前,服务端需要提供相应的凭证用以辅助客户端确认调用的服务具有预先确定的身份.对于这样的服务认证模式,具有两个重要的概念,即服务凭证和服务身份. 目录:

[WCF安全系列]谈谈WCF的客户端认证[用户名/密码认证]

对于基于Internet的应用,基于用户名和密码的认证方式是最为常用的,而WCF为你提供了不同模式的用户名认证方式.首先还是从用户凭证的表示说起. 一.用户名/密码认证的三种模式 基于用户名/密码的用户凭证通过类型UserNamePasswordClientCredential表示.而在ClientCredentials中,只读属性UserName表示这样一个用户凭证.你可以按照Windows凭证的方式为ChannelFactory<TChannel>或者ClientBase<TChan

[WCF安全系列]通过绑定元素看各种绑定对消息保护的实现

目录 一.BasicHttpBinding 二.WSHttpBinding.WS2007HttpBinding和WSDualHttpBinding 三.NetTcpBinding和NetNamedPipeBinding 四.NetMsmqBinding 五.总结 在本系列中我不断在强调这么一个要点:整个安全传输的实施最终是在信道层实现的.而信道层是根绝终结点绑定创建的,而绑定从结构上是一系列绑定元素的有序集合.当绑定的安全开启的时候,决定最终安全传输实现方式的必然是某一个或者多个绑定元素.了解相

[WCF安全系列]谈谈WCF的客户端认证[X.509证书认证]

前面介绍Windows认证和用户名/密码认证这两种典型的客户端认证模式,我们最后来介绍最后一种客户端认证方式,即客户端凭证类型为X.509证书时服务端采用的认证,简称为证书认证.我们照例先看看看客户端证书凭证如何设置设置. 一.客户端证书凭证的设置 在服务认证一文中,我们知道了基于X.509证书证书的服务凭证通过X509CertificateRecipientServiceCredential类型表示.与之对应地,客户端凭证对应的类型是X509CertificateInitiatorClient

[WCF安全系列]实例演示:TLS/SSL在WCF中的应用[SSL over TCP]

在接下来的系列文章中我们正是讨论关于身份认证的主题.在前面我们已经谈到了,WCF中的认证属于"双向认证",既包括服务对客户端的认证(以下简称客户端认证),也包括客户端对服务的认证(以下简称服务认证).客户端认证和服务认证从本质上并没有什么不同,无非都是被认证一方提供相应的用户凭证供对方对自己的身份进行验证.我们先来讨论服务认证,客户端认证放在后续的文章中. 在<从两种安全模式谈起>中,我们对TLS/SSL进行了简单的介绍.我们知道,客户端和服务在为建立安全上下文而进行的协商

[WCF安全系列]实例演示:TLS/SSL在WCF中的应用[HTTPS]

上一篇演示的是绑定类型为NetTcpBinding情况下基于TLS/SSL的Transport安全模式的实现,接下来我们改用另外一种绑定:WS2007HttpBinding.对于基于HTTP的绑定,Transport安全模式的实现方式又根据寄宿方式的不同而具有一定的差异,我们首先来介绍自我寄宿的方式. 一.自我寄宿(Self-Hosting) 无论对于HTTPS还是SSL Via TCP,服务端都需要绑定一个证书.对于采用后者的NetTcpBinding,我们是通过ServiceCredenti