希望有人能够帮助我解决这个问题。我正在寻找一种在我的WCF服务上启用消息级安全性的方法,而不是使用证书。
问题是该应用程序在通过多个站点连接的VPN的客户端上使用,每个站点都有自己的域控制器,而且这些域之间互相不信任。
虽然很多人说证书是可行的方法,但是我完全不懂证书,也不知道它是否适用于这种环境?
恳请大家的帮助:) 谢谢! Andries
希望有人能够帮助我解决这个问题。我正在寻找一种在我的WCF服务上启用消息级安全性的方法,而不是使用证书。
问题是该应用程序在通过多个站点连接的VPN的客户端上使用,每个站点都有自己的域控制器,而且这些域之间互相不信任。
虽然很多人说证书是可行的方法,但是我完全不懂证书,也不知道它是否适用于这种环境?
恳请大家的帮助:) 谢谢! Andries
实际上,证书真的是解决这个问题的方法!我强烈建议您使用证书!这并不难。其实这是您的问题:"域彼此不信任"。通过证书,您将获得相互信任的域。
以下是逐步说明如何操作:
1)必须在客户端上创建证书。为此,转到“开始”菜单->运行->输入“cmd”,然后按Enter键。在控制台窗口中键入: makecert.exe MakeCert -pe -ss My -sr LocalMachine -a sha1 -sky exchange -n CN=ClientCertificateName (使用您选择的名称更改“ClientCertificateName”)
2)在服务器上执行相同操作,更改证书名称!
3)在完成步骤1)和2)之后,您的客户端和服务器都安装了自签名证书。现在您需要导出这些证书,并在服务器的TrustedPeople文件夹中导入客户端证书,在客户端的TrustedPeople文件夹中导入服务器证书。要执行此操作,请转到“开始”菜单->运行->输入“mmc”,然后按Enter键。
4)要打开证书存储位置,请转到“文件”->“添加/删除快捷方式”->在新窗口中选择“证书”(左侧)并单击“添加”->单击“确定”->选择“计算机帐户”->下一步->完成->确定。之后,证书控制台将打开。展开证书节点(左侧)并导航到个人/证书节点。在那里,您将找到在先前步骤中创建的证书。右键单击证书并导出它以包括私钥。将导出的证书保存到文件中。然后将此文件复制到另一台计算机并在“受信任的人/证书”节点下导入它。
5)对于另一台计算机,重复步骤4),最终目标是在主机的计算机上导入客户端证书,反之亦然。
现在,您已经(希望如此)设置了证书,您必须告诉您的服务使用它们。为此,可以使用应用程序的Web.config(app.config)文件或编写代码。
<security mode="Message">
<message clientCredentialType="Certificate" />
</security>
在客户端和服务器的配置文件中添加安全节点后,您需要将以下行为添加到绑定中:
<behaviors >
<endpointBehaviors>
<behavior name="your_binding_behavior">
<clientCredentials>
<clientCertificate findValue="[The name of the client certificate here]"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectName"/>
<serviceCertificate>
<defaultCertificate findValue="[The name of the server certificate here]"
storeLocation="LocalMachine"
storeName="TrustedPeople"
x509FindType="FindBySubjectName"/>
<authentication certificateValidationMode="PeerOrChainTrust"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
就是这样了!你可以开始使用了!如果需要更多信息,可以阅读这篇文章。而且这里还有更详细的介绍。
希望对你有所帮助。
如果我没有理解错,如果您的目标是在服务器和客户端之间加密数据,您只需要在服务器上创建证书,并在WCF服务web.config中设置MessageClientCredentialType =“None”。
网络上发布了数十种“演练”,有些比其他人好。我也曾为保护我的WCF服务而苦苦挣扎,直到我找到了这个演练:
http://blog.functionalfun.net/2008/05/how-to-create-server-certificate-for.html
我也认为基于证书的消息级安全是最好的选择 - 因为使用消息级安全,客户端和服务器都需要加密消息 - http://msdn.microsoft.com/en-us/library/ms731172.aspx - 或者也可以尝试混合模式安全 - 这里有一些很好的指导 - http://blogs.msdn.com/govindr/archive/tags/WCF/default.aspx
http://blogs.msdn.com/jmeier/archive/2008/03/27/patterns-and-practices-wcf-security-guidance-now-available.aspx 和 http://www.codeplex.com/WCFSecurity 是其他提供优秀指导的资源。