使用互斥 SSL 身份验证(WCF)






4.13/5 (6投票s)
如何在 WCF 中配置和使用相互 SSL 身份验证。
引言
在本文中,我将向您展示如何在 WCF 中配置客户端和服务以使用相互 SSL 身份验证。如果您不熟悉相互 SSL 身份验证的概念,我建议您阅读名为相互 SSL 身份验证简介的文章,然后继续阅读本文。
背景
Windows Communication Foundation (WCF) 是一个用于构建面向服务的应用程序的框架。地址、绑定和契约 (ABC) 是所有 WCF 应用程序的基本构建块。绑定控制消息通信的三个方面
- WS-* 协议套件,包括 WS-Security、WS-ReliableMessaging 等。
- 消息编码,例如 XML 1.0、消息传输优化机制 (MTOM) 和二进制。
- 传输协议,包括 HTTP、TCP、命名管道和 Microsoft 消息队列 (MSMQ)。
因此,绑定是配置相互 SSL 身份验证的地方。但是,相互 SSL 身份验证是传输层安全,它只能在两个端点(服务和客户端)之间提供“点对点”安全。如果客户端和服务器之间存在中间系统,则每个中间点都必须通过新的安全连接转发消息。
考虑到这一事实,只有支持传输安全性的绑定才能配置为使用相互 SSL 身份验证。以下列表显示了支持传输层安全性的标准绑定
- BasicHttpBinding
- WSHttpBinding
- WS2007HttpBinding
- NetTcpBinding
- NetNamedPipeBinding
- NetMsmqBinding
- NetPeerTcpBinding
- MsmqIntegrationBinding
配置
WCF 中的相互 SSL 身份验证配置是一个两步过程
绑定配置
在 WCF 中启用应用程序使用传输安全性并使用证书作为其凭据就像在客户端和服务应用程序配置文件中的<binding>
部分中指定以下设置一样简单
- 指定“
Transport
”作为安全模式。 - 指定“
Certificate
”作为clientCredentialType
。
并且这些设置适用于所有绑定,无论它是 BasicHttpBinding、NetTcpBinding 还是任何其他支持传输层安全性的合格绑定。
下图显示了如何在 basicHttpBinding 和 netTcpBinding 中应用这些设置
BasicHttpBinding
NetTcpBinding
行为配置
要配置客户端和服务应用程序在其相互身份验证过程中出示其证书,它们需要一个端点和服务行为,分别指定客户端证书和服务证书。
客户端配置 (EchoClient)
- 端点行为在绿色框中突出显示。
- 客户端证书在蓝色框中突出显示。
服务配置 (EchoService)
- 服务行为在绿色框中突出显示。
- 服务证书在蓝色框中突出显示。
使用示例
我已经创建了两个演示项目,可以从本文顶部的链接中获取,它们在 BasicHttpBinding 和 NetTcpBinding 中使用相互 SSL 身份验证。为了运行演示项目,您需要在客户端和服务项目中更改以下设置
- 根据您的环境设置,更改客户端和服务端点地址中的主机名和域名 (demopc.mydomain.com)。
- 如果端口 (56111) 已被占用,则可以选择更改客户端和服务端点地址中的端口。
- 指定一个有效的客户端和服务证书,这些证书可从您的工作站证书存储区获取。
历史
- 2012 年 3 月 16 日:初始版本。