WCF消息级别安全性

3

希望有人能够帮助我解决这个问题。我正在寻找一种在我的WCF服务上启用消息级安全性的方法,而不是使用证书。

问题是该应用程序在通过多个站点连接的VPN的客户端上使用,每个站点都有自己的域控制器,而且这些域之间互相不信任。

虽然很多人说证书是可行的方法,但是我完全不懂证书,也不知道它是否适用于这种环境?

恳请大家的帮助:) 谢谢! Andries

3个回答

11

实际上,证书真的是解决这个问题的方法!我强烈建议您使用证书!这并不难。其实这是您的问题:"域彼此不信任"。通过证书,您将获得相互信任的域。

以下是逐步说明如何操作:

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>


就是这样了!你可以开始使用了!如果需要更多信息,可以阅读这篇文章。而且这里还有更详细的介绍

希望对你有所帮助。


1
谢谢您的回复,听起来是一个不错的解决方案。问题是我正在寻找另一种方法,因为如果您需要在整个国家的PVN上为100台或更多台计算机执行此操作,这种方法将需要很长时间;( 您是否对我有任何建议。此致敬礼 - Andries

2

如果我没有理解错,如果您的目标是在服务器和客户端之间加密数据,您只需要在服务器上创建证书,并在WCF服务web.config中设置MessageClientCredentialType =“None”。

网络上发布了数十种“演练”,有些比其他人好。我也曾为保护我的WCF服务而苦苦挣扎,直到我找到了这个演练:

http://blog.functionalfun.net/2008/05/how-to-create-server-certificate-for.html


0

我也认为基于证书的消息级安全是最好的选择 - 因为使用消息级安全,客户端和服务器都需要加密消息 - 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.aspxhttp://www.codeplex.com/WCFSecurity 是其他提供优秀指导的资源。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接