一、WCF配置

1 Address

将服务端发布地址和客户端访问地址都配置为https开始的安全地址。参考如下。

<add key="SrvUrl" value="https://127.0.0.1:8001/Service"/>

2 Bingding

为适应WCF自寄宿的模式,应采用WSHttpBinding作为绑定模式,并选择Transport安全模式,此模式下支持由服务器SSL证书保证的信息完整性、保密性、服务端身份验证(不支持客户端身份验证,如甲方要求需要验证调用WCF服务客户端的身份,则要配置其他的安全模式)。

Binding实例化代码:

WS2007HttpBinding wshttpbinding = new WS2007HttpBinding();
wshttpbinding.MaxReceivedMessageSize = ;
wshttpbinding.SendTimeout = new TimeSpan(, , );
wshttpbinding.ReceiveTimeout = new TimeSpan(, , );
//设置安全模式为Transport
wshttpbinding.Security.Mode = SecurityMode.Transport;
//不验证客户端身份
wshttpbinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;

3 Contract

契约与基础的basicHttpBingding没有区别,不用另作配置。

二、服务器X.509证书

1 用途

服务端首次相应https请求时要将加密算法以及绑定的X.509数字证书发送给客户端,所以使用https发布WCF服务时必须提供X.509数字证书,数字证书一般由官方CA机构颁发,我们测试时可以使用工具自己制作。

2 生成

测试用X.509数字证书可以使用微软提供的makecert.exe来生成,命令如下,其中参数-n x509name表示证书名称,参数-pe表示私钥可导出,参数-sr location表示证书存储唯智为本机,参数-ss store表示证书存储区,参数-sky keytype表示主体密钥类型。

PS C:\WINDOWS\system32> C:\Cert\MakeCert -n "CN=SSWMS_WDZ" -pe -sr LocalMachine -ss My -sky exchange

3 信任证书

证书生成后要将其移动到受信任人区域,使用CertMgr.exe操作,命令如下。

PS C:\WINDOWS\system32> C:\Cert\certmgr.exe -add -r LocalMachine -s My -c -n SSWMS_WDZ -r LocalMachine -s TrustedPeople

4 绑定端口

https发布之前还需要将生成的X.509证书绑定到发布端口,以便传输时系统能正确找到证书用于加密,绑定证书使用系统自带程序netsh.exe,命令如下,其中certhash为证书指纹,appid为系统GUID。

netsh http add sslcert ipport=0.0.0.0: certhash= 87c6227b200430b0d882d96c9e764984a364d7c0 appid={ a984bd18-a513-41fc-98d5-282078f60e1e}

解除绑定可使用命令。

http delete sslcert ipport=0.0.0.0:

三、主程序

由于我们的测试证书是非CA官方机构颁发,所以证书不在信任链中,客户端在不信任证书的情况下会主动拒绝调用,我们需要在客户端程序注册ServicePointManager静态ServerCertificateValidationCallback回调自定义证书认证方式,让验证结果返回值为true,强制客户端信任测试证书,在客户端程序入库处添加代码如下。

ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCert
ificateValidationCallback((sender, x509cert, x509chain, pErrors) => true);

四、元数据

https发布的元数据访问方式与http相同,但浏览器会提示证书有误。

五、可能遇到的异常

1 证书未成功绑定到服务发布地址

2 客户端未信任服务端证书

六、工具和代码下载

1 证书制作工具

MakeCert.exe和CertMrg.exe: https://pan.baidu.com/s/1pM54LU7 密码:eaba

WCF自寄宿实现Https绑定的更多相关文章

  1. 关于WCF引用方式之WCF服务寄宿控制台

    1.创建解决方案WCFService 依次添加四个项目,如上图,Client和Hosting为控制台应用程序,Service和Service.Interface均为类库. 2.引用关系 Service ...

  2. IIS7 HTTPS 绑定主机头

    IIS7下面默认HTTPS绑定是无法指定主机头的,但我们可以通过手工修改IIS配置来实现主机头绑定. 打开C:\Windows\system32\inetsrv\config\applicationH ...

  3. 创建WCF服务寄宿到IIS

    一.WCF简介: Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台. 整合了原有的win ...

  4. WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘

    原文:WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘 通过<再谈IIS与ASP.NET管道>的介绍,相信读者已经对IIS和ASP.NET的请求处理管道有了一个大致 ...

  5. WCF 项目应用连载[8] - 绑定、服务、行为 大数据传输与限流 - 下 (ServiceThrottlingAttribute)

    因为ORM的原因,对Attribute编程有一种情节..所以这节的出现,完全是因为在WCF对自定义Attribute的一种应用. WCF 项目应用连载[7] - 绑定.服务.行为 大数据传输与限流 - ...

  6. WCF扩展之实现ZeroMQ绑定和protocolBuffer消息编码(二)实现IRequestChannel(2016-03-15 12:35)

    这是这个系列的第二篇,其他的文章请点击下列目录 WCF扩展之实现ZeroMQ绑定和protocolBuffer消息编码(一)概要设计 WCF扩展之实现ZeroMQ绑定和protocolBuffer消息 ...

  7. WCF扩展之实现ZeroMQ绑定和protocolBuffer消息编码(三)实现ReplyChannel(2016-03-15 12:35)

    这是这个系列的第三篇,其他的文章请点击下列目录 WCF扩展之实现ZeroMQ绑定和protocolBuffer消息编码(一)概要设计 WCF扩展之实现ZeroMQ绑定和protocolBuffer消息 ...

  8. IIS6与IIS7在编程实现HTTPS绑定时的细微差别

    本文章其实最主要信息是: 问题出在那个小小的*号上——IIS6中不支持通配符,第一部分为空时表示(All Unsigned),而IIS7中同时支持空或通配符的写法,如果为空则自动转为*:443:,我们 ...

  9. 将使用netTcp绑定的WCF服务寄宿到IIS7上全记录 (这文章也不错)

    原文地址:http://www.cnblogs.com/wengyuli/archive/2010/11/22/wcf-tcp-host-to-iis.html 摘要 在项目开发中,我们可能会适时的选 ...

随机推荐

  1. Visual Studio最常用的快捷键

    Ctrl + J:快捷提示,强迫智能感知: Ctrl + 空格键:使用 IntelliSense(智能感知)自动完成: Ctrl + Z:撤销,回退键: Ctrl + Shift + 空格:强迫显示参 ...

  2. Linux 目录流管理

    目录 1. 打开/关闭文件 1). 打开目录 / opendir 2). 关闭文件 / fclose 2. 读/写目录流 1). 目录流-读 / readdir & readdir_r 3. ...

  3. c#基础学习(0702)之面向对象和方法重写概述

    面向对象编程(OOP==>Object-Oriented Programming) OOA:面向对象分析 OOD:面向对象设计 OOAD:面向对象分析与设计 什么是面向对象?一种分析问题的方式( ...

  4. 使用IDEA工具配置和运行vue项目(详细其中的坑)

    刚来公司实习发现公司的前端使用的是vue,之前根本就没有听说过.然后一上来就需要看代码,but but 就是没有文档什么的东西, 就需要自己去研读,我就想去运行其中的前端和后端联调起来方便理解,结果在 ...

  5. Java8简明学习之接口默认方法

    接口中有默认方法实现Java8允许我们使用default关键字,为接口声明添加非抽象的方法实现. public interface DefaultInterFace { int plus(int x, ...

  6. 序列化模块1 json

    ......得到一个 字符串 的结果 过程就叫序列化 字典 / 列表 / 数字 /对象 -序列化->字符串 为什么要序列化 # 1.要把内容写入文件 序列化 # 2.网络传输数据 序列化 字符串 ...

  7. Code Signal_练习题_Make Array Consecutive2

    Description Ratiorg got statues of different sizes as a present from CodeMaster for his birthday, ea ...

  8. BZOJ4977: [[Lydsy1708月赛]跳伞求生

    传送门 直接贪心 考虑到 \(n\) 个人的贡献都是 \(a_i\),另外 \(m\) 个人的贡献都是 \(c_i-b_i\) 首先 \(a_i>b_j\) 的限制不好做,所以将 \(a,b\) ...

  9. 洛谷P2973 [USACO10HOL]赶小猪(高斯消元 期望)

    题意 题目链接 Sol 设\(f[i]\)表示炸弹到达\(i\)这个点的概率,转移的时候考虑从哪个点转移而来 \(f[i] = \sum_{\frac{f(j) * (1 - \frac{p}{q}) ...

  10. 网件路由器wps无法设置

    问题:网件路由器WPS设置项全为灰色,无没设置 原因:因为设置WIFI时,将ssid广播隐藏了,导致WPS功能失效,所以WPS设置项为灰色.要想设置WPS,将SSID广播恢复即可