0
点赞
收藏
分享

微信扫一扫

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



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)_exchange_02

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


举报

相关推荐

0 条评论