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. [jQuery学习系列五 ]5-Jquery学习五-表单验证

    前言最近总是有一个感觉,虽然这些东西都自己学习并一个案例一个案例的去验证过了.但是总觉得不写成博客记录下来这些都不是自己的东西(心理作用,哈哈).所以每当学习或者复习相关的知识我都喜欢记录下来,下面开 ...

  2. crossplatform---bower解决js的依赖管理

    从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏 ...

  3. Sublime Text 设置文件详解

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

  4. java基础学习总结——java环境变量配置

    前言 学习java的第一步就要搭建java的学习环境,首先是要安装JDK,JDK安装好之后,还需要在电脑上配置"JAVA_HOME”."path”."classpath& ...

  5. php-fpm.conf 重要参数 max_children 和 request_terminate_timeout(转)

    php-fpm.conf有两个至关重要的参数:一个是”max_children”,另一个是”request_terminate_timeout”我的两个设置的值一个是”40″,一个是”900″,但是这 ...

  6. nginx用户认证配置( Basic HTTP authentication)

    ngx_http_auth_basic_module模块实现让访问着,只有输入正确的用户密码才允许访问web内容.web上的一些内容不想被其他人知道,但是又想让部分人看到.nginx的http aut ...

  7. JavaScript 2016年的概况

    国外的网站stateofjs.com根据超过九千位开发人员的问卷调查,发布了2016年JavaScript的年度概况报名. 注:本文翻译的部分可能存在不准确的情况,请以原文为准. 调查结果的报告目录结 ...

  8. 让JNLP应用程序从Firefox浏览器启动起来

  9. Apex Design Patterns

    Apex allows you to build just about any custom solution on the Force.com platform. But what are the ...

  10. old header

    海纳百川 山不拒土 No Backspace in Real Life. Love Life![Cloud][LBS][GIS][GPS][MAPS][C++][Java]