重温WCF之WCF传输安全(十三)(1)前期准备之证书制作(转)
转载地址:http://www.cnblogs.com/lxblog/archive/2012/09/12/2682372.html
一、WCF中的安全方式
说到安全就会涉及到认证,消息一致性和机密性,WCF的安全方式分为两种,即传输安全和消息安全。
传输安全和消息安全的区别:
传输安全提供点对点的安全: 比如 A 提供服务,B和C直接连接到A,这时候A与B 及 A与C直接的传输是安全的,如果B通过C连接到A,那么A与B直接是安全的,B与C之间是不安全的。
消息安全:是把安全机制都应用在消息级别上面的,能够提供端对端的安全,不管消息的路由路径多么复杂,也能保证消息的安全传输。
传输安全我们一般应用在局域网中,消息安全主要应用在复杂的互联网环境中,传输安全有着消息安全不可比拟的优势就是高性能。
二、如何制作证书
既然是传输安全就必然会用到SSL,Https,就会涉及到数字证书,数字证书的概念和原理我们就不介绍了,百度一下就Ok,我们只要知道它是为我们的服务器端和客户端提供身份认证和能为我们的消息提供加密的东东就可以了。首先我们来演示一下制作证书的过程:
Windows server 系统都有证书服务的,我们可以通过添加证书服务来制作证书,具体操作可以参照这篇文章。
我们后面的DEMO环境都是在Win7 +vs2010环境下面进行的,因此我们只能通过MakeCert命令方式创建证书,并通过netsh程序给端口注册证书。
1、MakeCert 命令 可以通过 Visual Studio 命令提示输入“ MakeCert”运行,命令主要参数介绍:(参数有很多,不一一列出,只列出我们使用的)
-n :证书的主题名称;例如 -n "CN=计算机名称"
-pe:将生成的私钥标记可导出;
-sr:数字证书的位置(CurrentUser代表当前帐户;LocalMachine代表本机)
-ss:证书的存储区;-sky: 指定密钥的类型(signature:签名密钥;exchange:交换密钥)
-r :创建自签证书
注意:-n "CN=计算机名称" 默认为计算机名称,实际项目中可以为网站的名称,比如:wwww.xxx.com,当然你也可以使用其他名称,但是在WCF调用的时候会有信任关系异常提示,Demo中我们会进行介绍
2、netsh.exe 位于 C:\Windows\System32 目录下:
查看SSL证书的绑定: netsh> http show sslcert
将证书与端口进行绑定: netsh>http add sslcert ipport=0.0.0.0:端口号 certhash=证书的指纹 appid={一个有效的GUID}
删除端口绑定的证书: netsh>http delete sslcert ipport=0.0.0.0:端口
三、制作一个证书并绑定到ip地址端口:
1、制作证书:
我们启动Visual Studio 命令提示工具,然后输入:makecert -sr localmachine -ss My -n "CN=Lx-PC" -sky exchange -pe -r,回车,提示成功!

如何查看这个证书呢?这个证书放到哪里了呢?
我们可以通过运行MMC命令打开控制台,选择 “文件” 菜单中的 “添加或删除管理单元” 打开该对话框,在弹出的对话框左面选择 “证书” :

并点击 “添加” 弹出 “证书管理” 对话框,我们选择 “计算机帐户” ,并点击 “下一步” ,选择 “本地计算机” 之后,点击完成。当然还可以在继续添加一个 “我的用户帐户”,如下图:

点击 “确定” 之后,我们可以在 “证书(本地计算机)” --“个人”--“证书” 节点中 ,看到我们创建的 “Lx-PC” 证书;

接下来要做的是将该证书加入到 “受信任的根证书颁发机构” 和 “受信任人” 节点中,至于为什么会这么做。举个简单的例子,身份证就是我们的证书,谁是可信任的颁发机构,当然是当地xxx公安单位了,如果不是权威机构发布的证书,那么该证书肯定是有问题的了。
我们 “右击” 我们创建的证书,选择 “所有任务”--“导出”,打开 “证书导出” 对话框,选择 “下一步” 后,选择 “是,导出密钥”

并点击 “下一步”,默认选择“个人信息交换”,

继续点击 “下一步” ,输入 密码 “123456”,

点击 “下一步” 后,选择 “浏览” ,文件命名为 “lxpc.pfx”,并保存到桌面。
之后,我们分别右击 “受信任的根证书颁发机构” 节点和 “受信任人” 节点,选择 “所有任务” --“导入” 。选择我们刚刚导出到桌面的lxpc.pfx 文件,并输入 密码123456,之后,就分别导入到两个节点中了。
2、利用netsh 命令将制作的证书绑定到端口:
这时候我们需要查看证书的指纹: 双击我们的证书,选择详细信息标签

记录下该证书的指纹为:63c06b2292c76391fe075becb01e4a1f350a5a87
接着,我们通过windows 控制台 cmd,运行 netsh 命令,并输入:
http add sslcert ipport=0.0.0.0:9000 certhash=63c06b2292c76391fe075becb01e4a1f350a5a87 appid={BFC5621F-EF33-1234-AD7E-51EDDAEC5234}
结果显示:

我们可以利用 netsh> http show sslcert 来查看我们的证书是否绑定到了9000端口:

由图可见:我们已经将我们刚刚制作的证书 绑定到了 9000端口。
好了,前期证书工作准备完成,下一篇我们来通过利用证书通过SSL实现一个对服务器端进行认证,但是对客户端采用匿名方式的WCF 例子。
重温WCF之WCF传输安全(十三)(1)前期准备之证书制作(转)的更多相关文章
- WCF分布式开发步步为赢(4):WCF服务可靠性传输配置与编程开发
今天继续WCF分布式开发步步为赢系列的第4节:WCF服务可靠性传输配置与编程开发.这个章节,我们要介绍什么是WCF服务的可靠性传输,随便介绍网络协议的概念,Web Service为什么不支持可靠性传出 ...
- WCF 笔记 (2) - 传输泛型 List 对象
WCF 笔记 (2) - 传输泛型 List 对象 本帖介绍怎么在 WCF 中,在 Server-side 和 Client-side 之间,传递默认无法传输的 List<T>.List& ...
- C# WCF学习笔记(二)终结点地址与WCF寻址(Endpoint Address and WCF Addressing) WCF中的传输协议
URI的全称是 Uniform Rosource Identifire(统一资源标识),它唯一标识一个确定的网绐资源,同时也表示资源所处的位置及访问的方式(资源访问所用的网络协议). 对于Endpoi ...
- 使用Fiddler解析WCF RIA Service传输的数据
原文 http://www.cnblogs.com/wintersun/archive/2011/01/05/1926386.html 使用Fiddler 2 解析WCF RIA Service传输的 ...
- WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[下篇]
原文:WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[下篇] 在[第2篇]中,我们深入剖析了单调(PerCall)模式下WCF对服务实例生命周期的控制,现在我们来 ...
- WCF基础之传输
WCF中使用的主要传输的方式有HTTP,TCP和命名管道. 绑定包括可选的协议绑定元素(如安全),必需的编码绑定元素和必须的传输协定绑定元素三个部分,而由传输方式则是由传输绑定元素来决定的. HTTP ...
- WCF大文件传输【转】
http://www.cnblogs.com/happygx/archive/2013/10/29/3393973.html WCF大文件传输 WCF传输文件的时候可以设置每次文件的传输大小,如果是小 ...
- 跟我一起学WCF(13)——WCF系列总结
引言 WCF是微软为了实现SOA的框架,它是对微乳之前多种分布式技术的继承和扩展,这些技术包括Enterprise Service..NET Remoting.XML Web Service.MSMQ ...
- Learing WCF Chapter1 WCF Services
WCF ServicesWCF services are the new distributed boundary in an enterprise application—with an empha ...
随机推荐
- JS中try....catch
1.事情还有得挽回,换条路走try { 执行某个逻辑} catch (e) { 出问题,换个逻辑执行} 2.体面的退出try { 正常流程} catch (e) { 弹个框告诉用户不好意思出了点问题 ...
- java去除字符串中的空格、回车、换行符、制表符
import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author chzeze * 2016-11-07 */ ...
- js 函数前的+号
不知啥时候起,函数的闭包需要增加+才能立即执行了. 不加反而报语法错.orz +function() { console.log("Foo!"); }(); 输出: Foo!< ...
- UITableView 系列之自定义 UITableViewCell
http://www.360doc.com/content/14/0225/14/11029609_355567657.shtml
- 【GoLang】深入理解slice len cap什么算法? 参数传递有啥蹊跷?
先上结论 .内置append函数在现有数组的长度 < 时 cap 增长是翻倍的,再往上的增长率则是 1.25,至于为何后面会说. .Go语言中channel,slice,map这三种类型的实现机 ...
- Hadoop2.2.0环境下Sqoop1.99.3安装
本文转载自http://blog.csdn.net/liuwenbo0920/article/details/40504045 1.安装准备工作: 已经装好的hadoop环境是hadoop 2.2.0 ...
- C#之数据分页
方法一:临时datatable 创建临时表,临时变量 DataTable dt = null; //临时表 ; //总分页数 ; //当前页数 ; //每页的数量 加载数据到临时表,该方法测试放到了窗 ...
- Django~学习计划
20160302 Excel,PDF 处理 GeoDjango学习:GIS编程,百度地图 Javascript 邮件系统 图像处理
- Asp.Net之自定义表达式构造器(ExpressionBuilder)
在Asp.Net的Page页面中我们经常会使用到资源文件.读取资源文件的方式为:<%$Resources:Resource1,Test1%>,这样就可以显示Resource1这个资源文件中 ...
- 仿知乎程序 fragment的切换以及toolbar在不同页面下显示的menu不同
我们在看知乎的时候,你会发现,首页,发现,关注,收藏,草稿这五项,你在点击之后进入到相应页面之后,侧滑菜单还在,你左侧滑一下,这个侧滑菜单还在,而提问,左滑屏幕,这个页面就没有,有点像返 ...