希望有人可以在这件事上帮助我。我正在寻找一种在我的 WCF 服务上启用消息级别安全性的方法,而不是使用证书。问题是该应用程序用于通过 VPN 与多个站点连接的客户端,每个站点都有自己的域控制器,并且域之间不相互信任。我对证书完全陌生,虽然很多人说这是要走的路,但我不知道它是否可以在这种环境下工作?
寻求帮助 :) 亲切的问候安德里斯
希望有人可以在这件事上帮助我。我正在寻找一种在我的 WCF 服务上启用消息级别安全性的方法,而不是使用证书。问题是该应用程序用于通过 VPN 与多个站点连接的客户端,每个站点都有自己的域控制器,并且域之间不相互信任。我对证书完全陌生,虽然很多人说这是要走的路,但我不知道它是否可以在这种环境下工作?
寻求帮助 :) 亲切的问候安德里斯
其实证书真的是要走的路!我强烈建议您使用证书!这并不难。实际上这是您的问题:“域不相互信任”。使用证书,您将获得相互信任的域。以下是如何执行此操作的分步说明:
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)要打开证书存储位置,请转到文件 -> 添加/删除管理单元 -> 在新窗口中选择证书(在左侧)并单击添加->单击确定->选择“计算机帐户”->下一步->完成->确定
之后,证书控制台将打开。展开证书节点(左侧)并导航到 Personal/Certificates 节点。在那里,您将找到在前面的步骤中刚刚创建的证书。右键单击证书并将其导出,包括私钥。将导出的证书保存到文件中。然后将此文件复制到另一台机器并在“Trusted People/Certificates”节点下导入。
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 - 或者也可以尝试 MixedModesecurity - 这里有一些很好的指导 - 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 是其他资源以获得很好的指导。