欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

WCF自寄宿实现Https绑定

程序员文章站 2022-04-16 21:24:28
一、WCF配置 1 Address 将服务端发布地址和客户端访问地址都配置为https开始的安全地址。参考如下。 2 Bingding 为适应WCF自寄宿的模式,应采用WSHttpBinding作为绑定模式,并选择Transport安全模式,此模式下支持由服务器SSL证书保证的信息完整性、保密性、服 ......

一、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 = 6553500;
wshttpbinding.SendTimeout = new TimeSpan(0, 5, 1);
wshttpbinding.ReceiveTimeout = new TimeSpan(0, 5, 1);
//设置安全模式为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

WCF自寄宿实现Https绑定

 3 信任证书

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

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

WCF自寄宿实现Https绑定

 

4 绑定端口

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

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

WCF自寄宿实现Https绑定

 

解除绑定可使用命令。

http delete sslcert ipport=0.0.0.0:8001

WCF自寄宿实现Https绑定

  

三、主程序

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

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

 

四、元数据

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

 WCF自寄宿实现Https绑定

 

五、可能遇到的异常

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

WCF自寄宿实现Https绑定

  

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

WCF自寄宿实现Https绑定

  

六、工具和代码下载

1 证书制作工具

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