天天看点

绑定(BasicHttpBinding)

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;      
绑定(BasicHttpBinding)

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();
BasicHttpSecurityMode.Message;
BasicHttpMessageCredentialType.Certificate;
//设置服务端证书
"CN=win2008");
//设置不验证客户端证书的有效性
    myServiceHost.Credentials.ClientCertificate.Authentication.CertificateValidationMode =
X509CertificateValidationMode.None;
客户端代码:
BasicHttpBinding myBinding = new BasicHttpBinding();
BasicHttpSecurityMode.Message;
BasicHttpMessageCredentialType.Certificate;
EndpointAddress ea = new EndpointAddress("http://win2008:8056/WCFService/GetIdentity");
GetIdentityClient gc = new GetIdentityClient(myBinding, ea);
//设置客户端证书
"CN=TestClient",
StoreLocation.CurrentUser, StoreName.My);
//指定服务端证书
"CN=win2008",
StoreLocation.LocalMachine, StoreName.My);
//不验证服务端证书的有效性
    gc.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode =
X509CertificateValidationMode.None;
//执行代理类Get方法
string result = gc.Get(WindowsIdentity.GetCurrent().Name);      
绑定(BasicHttpBinding)

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";