绑定(BasicHttpBinding)

本文介绍了WCF中BasicHttpBinding绑定的安全模式,包括None、Message-客户端验证Certificate及Transport等模式,详细解释了每种模式下的完整性、保密性、服务端及客户端身份验证等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、BasicHttpBinding

这种绑定适用于与符合 WS-Basic Profile 的 Web 服务(例如基于 ASP.NET Web 服务 (ASMX) 的服务)进行的通信。此绑定使用 HTTP 作为传输协议,并使用文本/XML 作为默认的消息编码。

basicHttpBinding的默认安全模式是None,即没有任何安全设置,消息都以明文传送,对客户端也不进行验证。

但是basicHttpBinding绑定可以实现安全传输,也可以通过传输层和消息层来保证消息的安全性。

basicHttpBinding设置为Transport安全模式,传输层的安全是使用IIS的安全机制,比如基本身份验证、集成windows验证、SSL安全通道等等。

basicHttpBinding设置为Message安全模式,消息层使用WS-Security保证消息的安全性,Message模式只支持客户端Certificate验证。



2、安全模式NONE


basicHttpBinding绑定默认不提供安全性,默认的安全模式是None,不提供任何安全性,WCF提供这种方式只是为了跟WS-Basic Profile 的 Web 服务兼容。WCF的其它绑定默认都是提供安全性的。

这种方式的安全性:

完整性

不提供

保密性

不提供

服务端身份身份验证

不提供

客户端身份验证

无,并忽略客户端验证的其他方式设置,固定为None


myBinding.Security.Mode = BasicHttpSecurityMode.None;



3、安全模式Message-客户端验证Certificate

basicHttpBinding绑定的Message安全模式,客户端Certificate验证。此时将使用服务端证书,通过WS-Security协议保证消息安全。

WS-Security 规范已经定义了通过使用安全性令牌来安全地交换消息的基本机制。WS-Trust 规范以这个模型为基础进行构建,定义了如何发出和交换这些安全性令牌。

WS-Trust原理上类似SSL或TLS的机制,客户端不必有服务端的证书,服务端证书可以通过消息交换交换到客户端。WS-Security 规范则不同,它没有定义安全令牌的交换,所以客户端需要事先把安装服务端证书,并在通讯时指定服务端证书。

 

这种方式的安全性:


完整性

使用服务端证书,通过WS-Security规范建立的安全通道

保密性

使用服务端证书,通过WS-Security规范建立的安全通道

服务端身份身份验证

服务端证书提供

客户端身份验证

客户端证书提供


  获得和安装证同时客户端验证设置为Certificate,就需要提供客户端证书以验证客户端身份。

所有这里需要在服务端和客户端分别安装证书。

 

这里用Makecert.exe工具生成证书,使用下面的命令:

makecert -sr localmachine -ss My -n CN=win2008 -sky exchange -pe -r

这是服务端证书,win2008是服务端的机器名。

 

makecert -sr currentuser -ss My -n CN=TestClient -sky exchange -pe -r

这是客户端证书。


服务器代码:

   BasicHttpBinding myBinding = new BasicHttpBinding();

    myBinding.Security.Mode = BasicHttpSecurityMode.Message;

    myBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;

//设置服务端证书

    myServiceHost.Credentials.ServiceCertificate.SetCertificate("CN=win2008");

    //设置不验证客户端证书的有效性

    myServiceHost.Credentials.ClientCertificate.Authentication.CertificateValidationMode =

        System.ServiceModel.Security.X509CertificateValidationMode.None;

客户端代码:

 BasicHttpBinding myBinding = new BasicHttpBinding();

    myBinding.Security.Mode = BasicHttpSecurityMode.Message;

    myBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;

    EndpointAddress ea = new EndpointAddress("http://win2008:8056/WCFService/GetIdentity");

    GetIdentityClient gc = new GetIdentityClient(myBinding, ea);

    //设置客户端证书

    gc.ClientCredentials.ClientCertificate.SetCertificate("CN=TestClient",

        StoreLocation.CurrentUser, StoreName.My);

    //指定服务端证书

    gc.ClientCredentials.ServiceCertificate.SetDefaultCertificate("CN=win2008",

                StoreLocation.LocalMachine, StoreName.My);

    //不验证服务端证书的有效性

    gc.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode =

        System.ServiceModel.Security.X509CertificateValidationMode.None;

    //执行代理类Get方法

    string result = gc.Get(WindowsIdentity.GetCurrent().Name);


4、Transport--客户端验证None

BasicHttpBinding绑定默认不提供安全性,如果设置了Transport安全模式,需要通过IIS承载WCF服务,利用HTTPS协议来提供Transport层面的安全性。

这种方式的安全性:

完整性

服务端证书通过SSL保证

保密性

服务端证书通过SSL保证

服务端身份身份验证

服务端证书通过SSL验证服务端

客户端身份验证



5、Transport--客户端验证Basic

这部分测试HttpBinding设置为Transport安全模式,同时客户端验证设置为Basic验证时的情况。

实际上HttpBinding的Transport安全模式,WCF服务端是由IIS承载的,所以它的身份验证使用IIS的身份验证模式。

Basic身份验证,是由客户端提供服务端的windows用户的用户名和密码,用户名以明码方式发送,密码以base64编码方式发送,base64编码可以看作是明码。服务端收到客户端发送的用户名和密码后,跟服务端的windows用户中的用户去比对,如有匹配的则验证客户端的身份。

这种方式的安全性:

完整性

服务端证书通过SSL保证

保密性

服务端证书通过SSL保证

服务端身份身份验证

服务端证书通过SSL验证服务端

客户端身份验证

客户端提供服务端windows用户的用户名和密码,服务端验证。客户端传送到服务端的用户名和密码同样被SSL加密。



            //使用BasicHttpBinding绑定
            BasicHttpBinding myBinding = new BasicHttpBinding();
            //使用Transport安全模式
            myBinding.Security.Mode = BasicHttpSecurityMode.Transport;
            //客户端验证为None
            //myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
            //客户端验证为Basic
            //myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
            //客户端验证为Ntlm
            //myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;

            //客户端为Basic时,客户端提供用户名和密码
            //gc.ClientCredentials.UserName.UserName = "chnking";
            //gc.ClientCredentials.UserName.Password = "jjz666";


6、Transport--客户端验证NTLM,Windows


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值