Wcf的传输安全主要涉及认证、消息的一致性和机密性。Wcf采用两种不同的机制来解决这三个涉及传输安全的问题,即Transport安全模式和Message安全模式。

Transport安全模式利用基于传输层协议的安全机制解决传输安全涉及的三个问题。TLS/SSL是实现Transport安全最常用的方式。它的优缺点:

1. Transport安全模式依赖于具体的传输协议

2. 它只能提供基于点对点的安全传输保障,即客户端直接连接到服务端的场景。如果客户端和服务端之间的网络需要一些用于消息路由的中间节点,Transport安全模式则没有了用武之地。

3. 如果用Transport安全模式,意味着我们不得不在传输层(而不是在应用层)解决对客户端的认证。这就决定了可供选择的认证方式比较少。

Message安全模式直接将安全策略的目标对象转移到消息本身,通过对消息进行签名、加密实现消息安全传输。提供消息从发送端到接受端之间的安全传输,即端到端(end-to-end)安全传输。Message下的安全协议是一种应用层的协议。它的优缺点:

1. 由于Message安全模是在应用层通过对消息实施加密、签名等安全机制实现的,所以这是一种与具体传输协议无关的安全机制,不会因底层采用的是Tcp或http而有所不同。较之Transport安全,这种基于应用层实现的安全机制在认证方式上具有更多的选择。

2. 由于Message安全模式下的各种安全机制都是直接应用在消息(soap)级别的,因此无论消息路由多么复杂,都能够保证消息的安全传输。不同于Transport安全模式只提供点到点(point-to-point)的安全,Message安全模式提供端到端(end-to-end)的安全。

3. 由于Message安全模式是对WS-Security,WS-Trust,WS-SC,WS-SP这四个ws-*规范的实现,所以具有很好的互操作性,能够提供跨平台的支持。

但是Transport安全模式有一点是Message安全模式不能比的,那就是性能。

认证方式:

1. 用户名和密码认证

a) 将用户名映射为Windows账号,采用windows认证

b) 采用asp.net的成员资格(Membership)模块

c) 自定义认证逻辑

2. NTLM

3. Kerberos

4. 数字证书

(一) 服务端认证

服务端配置

<system.serviceModel>

<bindings>

<netTcpBinding>

<binding name=”transportTcpBinding”>

<security mode=”Transport”>

<transport clientCredentialType=”None”/>

</security>

</binding>

</netTcpBinding>

</bindings>

<services>

……

</services>

</system.serviceModel>

客户端配置

<system.serviceModel>

<bindings>

<netTcpBinding>

<binding name=”transportTcpBinding”>

<security mode=”Transport”>

<transport clientCredentialType=”None”/>

</security>

</binding>

</netTcpBinding>

</bindings>

<client>

……

</ client >

</system.serviceModel>

具体还需要一些证书之类的配置。

(二) 客户端认证

1. Windows认证

Using(ChannelFactory<Icalculator> channelFactory= new ChannelFactory<Icalculator>(“calculatorService”))

{

NetworkCredential credential = channelFactory.Credentials.Windows.ClientCredential.

credential.Domain=”domainName”;

credential.UserName=”username”;

credential.Password=”password”

Icalculator calculator = channelFactory.CreateChannel();

Double resutlt = calculator.Add(1,2);

……

}

2. 用户名密码认证

a) Windows:将用户名和密码映射为Windows账号和密码,采用Windows认证

b) MembershipProvider:利用配置的asp.net MembershipProvider,验证用户名和密码

c) 自定义:通过机箱抽象类UsernamePasswordValidator,自定义用户名/密码验证器进行验证

Using(ChannelFactory<Icalculator> channelFactory= new ChannelFactory<Icalculator>(“calculatorService”))

{

UserNamePasswordClientCredential credential = channelFactory.Credentials.UserName;

credential.UserName=”username”;

credential.Password=”password”

Icalculator calculator = channelFactory.CreateChannel();

Double resutlt = calculator.Add(1,2);

……

}

自定义认证:

Public class SimpelUsernamePasswordValidator: UsernamePasswordValiator

{

Public override void Validate(string username, string password)

{

……

}

}

服务端配置:

<configuration>

<system.serviceModel>

<behaviors>

<serviceBehaviors>

<behavior name=”customAuthenentication”>

<userNameAuthentication userNamePasswordValiationMode=”Custom” customUserNamePasswordValidationType=”……”>

</behavior>

</serviceBehaviors>

</behaviors>

<bindings>

…….

</bindings>

<services>

……

</services>

</system.serviceModel>

</configuration>

如果是Membership验证模式

<userNameAuthentication userNamePasswordValiationMode=”MembershipProvider” membershipProviderName=”myProvider”>

<system.web>

<membership defaultProvider=”myProvider”>

<providers>

<add name=”myProvider”

Type=”……”

ConnectionStringName=”…”

applicationName=””

requiresQuestionAndAnswer=”false”

/>

</providers>

</membership>

</system.web>

3. 证书认证

客户端

Using(ChannelFactory<Icalculator> channelFactory= new ChannelFactory<Icalculator>(“calculatorService”))

{

channelFactory.Credentials.ClientCertifacte.SetCentificate(

StoreLocation.LocalMachine,

StoreName.TrustedPeople,

X509FindType.FindBySubjectName,

“foo”);

Icalculator calculator = channelFactory.CreateChannel();

Double resutlt = calculator.Add(1,2);

……

}

服务端:

Using(ServiceHost host = new ServiceHost(typeof(CalculatorService)))

{

ServiceCredentials serviceCredentials = host.Description.Behaviors.Find<ServiceCredentials>();

If(null = serviceCredentials)

{

serviceCredentials = new serviceCredentials();

serviceCredentials.ClientCertifacte.Authentication.CretifacteValidationMode = X509CetrtifacteValidationMode.PeerOrChainTrust.

host.Description.Behaviors.Add(serviceCredentials);

host.Open();

……

}

}

WCF的传输安全(读书笔记)的更多相关文章

  1. PCI-Express协议传输层读书笔记

    http://www.doczj.com/doc/35cb19633169a4517723a3d9-9.html

  2. WPF,Silverlight与XAML读书笔记第四十八 - Silverlight网络与通讯

    说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘>的编排,对内容进行了总结并加入一些个人理解. 这一部分我们重点讨论下Silverlight ...

  3. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  4. Spark存储管理(读书笔记)

    Spark存储管理(读书笔记) 转载请注明出处:http://www.cnblogs.com/BYRans/ Spark的存储管理 RDD的存放和管理都是由Spark的存储管理模块实现和管理的.本文从 ...

  5. 《C#图解教程》读书笔记之一:C#和.NET框架

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.在.NET之前的编程世界 C#语言是在微软公司的.NET框架上开发程序而设计的,首先作者给大家纠正了一下C# ...

  6. 《TCP/IP详解卷1:协议》第1章 概述-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  7. 《TCP/IP详解卷1:协议》第2章 链路层-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  8. 『TCP/IP详解——卷一:协议』读书笔记——02

    2013-08-16 20:07:11 1.3 TCP/IP的分层 这是一个很好的图,要多看!!图上有些细节会在今后的笔记中提到,看不懂不必深究. IP是网络层上的主要协议,同时被TCP和UDP(这两 ...

  9. 《TCP/IP详解卷1:协议》第3章 IP:网际协议(1)-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

随机推荐

  1. Hibernate.initialize(Obj)用法

    导读:  在使用hibernate进行持久化时,有时需要动态的改变对象的加载,比如在编辑页面里面lazy=true,而在浏览页面lazy=false,这样可以在需要lazy的地方才进行控制.而配置文件 ...

  2. ubuntu下firefox无法看bilibili解决方案

    突然发现,在ubuntu中使用firefox打开bilibili网站无法加载视频与弹幕,在网上搜到的可能的问题为:linux下的firefox使用的flash player是老版本,bilibili不 ...

  3. QWidget 实现 打破布局 或者 当前窗体内的 弹窗 (借助伪造实现)

    but = QtWidgets.QToolButton(Dialog2) but.setText('**') but.setAutoRaise(True) layout.addWidget(but) ...

  4. Sublime Text 设置文件详解

     Sublime Text 2是那种让人会一眼就爱上的编辑器,不仅GUI让人眼前一亮,功能更是没的说,拓展性目前来说也完全够用了,网上介绍软件的文章和推荐插件的文章也不少,而且很不错,大家可以去找找自 ...

  5. 看大众点评V9新版如何为O2O止血 带领行业下半场回归理性

    前不久,美团点评CEO王兴提出的“中国互联网进入下半场”观点一直在持续发酵,并引发了整个互联网圈对于进入下半场该如何改革,如何迎战的深刻反思.在互联网的上半场,大家依托的是人口红利,但是到了下半场,用 ...

  6. 店商互联(北京)科技发展有限公司DS365.com

    店商互联(DS365)是目前北京最为知名的社区便超O2O平台服务商,店商互联(DS365)通过自主研发的移动订货配送与网络营销服务平台,以移动互联网和大数据为技术支撑,为社区超市实体店提供手机订货.物 ...

  7. iptables防火墙原理详解

    1. netfilter与iptables Netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤.数 ...

  8. C#窗体全屏功能

    最近有朋友让我给他弄个应用程序全屏的功能,例如银行的取号程序界面.所以我从网上查询了一些实现的方法. C#应用程序中如何实现全屏幕显示功能? 效果就像windows自带的屏幕保护程序和众多的游戏那样, ...

  9. “LAMP“或“LNMP”组合

    Linux作为操作系统,Apache和 Nginx作为 Web 服务器,MySQL 作为数据库,PHP/Perl/Python作为服务器端脚本解释器. 由于这四个软件都是免费或开放源码软件(FLOSS ...

  10. openCV_java Canny边缘检测

    边缘检测的原理: 检测出图像中所有灰度值变化较大的点,而且这些点连起来构成若干线条,这些线条就称之为图像的边缘. 1986年,由John F. Canny 提出! // Canny(Mat image ...