繁体   English   中英

WCF消息级安全性

[英]WCF Message Level Security

希望有人可以帮我解决这个问题。 我正在寻找一种在我的WCF服务上启用消息级安全性的方法,而不是使用证书。 问题是该应用程序用于通过VPN与多个站点连接的客户端,每个站点都有自己的域控制器,并且域不相互信任。 我对证书完全不熟悉,虽然很多人说这是要走的路,但我不知道它是否可以在这种环境下工作?

乞求帮助:)亲切的问候安德里斯

实际上证书真的是要走的路! 我强烈建议你使用证书! 这并不困难。 实际上这是你的问题:“域名不相互信任”。 使用证书,您将获得相互信任的域。 这是一步一步的说明如何做到这一点:

1)您必须在客户端上创建证书。 要执行此操作,请转到“开始”菜单 - >“运行” - >键入“cmd”并按Enter键在控制台窗口中键入: makecert.exe MakeCert -pe -ss My -sr LocalMachine -a sha1 -sky exchange -n CN = ClientCertificateName (change “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>


就是这样! 你很高兴! 有关此内容的更多信息,请阅读本文 这里更详细一点

HTH

除非我在这里遗漏了一些东西,如果您的目标是在服务器和客户端之间加密数据,您只需要在服务器上创建证书,并在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.aspxhttp://www.codeplex.com/WCFSecurity是其他资源以获得极大的指导

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM