仅具有服务证书的WCF消息安全性

时间:2010-07-12 16:33:04

标签: c# wcf wcf-security ws-security x509

我是WCF的新手,并且想知道是否可以执行Message Security,我只使用x.509证书进行服务,而对于客户端安全执行Windows凭据,这是否可接受,是否可以工作?尝试搜索网络,但要么没有讨论这种方法存在,要么我在谷歌搜索中添加了错误的措辞,非常感谢任何帮助,谢谢大家。

基本上,我在绑定中有这个:

<wsHttpBinding>
    <binding name="msgBinding">
        <security mode="Message">
            <message clientCredentialType="Windows" />
        </security>
    </binding>
</wsHttpBinding>

以及我的行为:

<behavior name="wsHttpCertificateBehavior">
    ...
    <serviceCredentials>
        <serviceCertificate findValue="MyCert" x509FindType="FindBySubjectName" storeLocation="CurrentUser" storeName="My" />
    </serviceCredentials>
</behavior>

2 个答案:

答案 0 :(得分:1)

你为什么要这样做?您的安全要求是什么?

您是否尝试使用服务证书来保护邮件传输,然后使用Windows安全性为客户端进行身份验证和授权?

Windows安全性仅在您位于同一域或设置某种联合安全性时才有效。如果您在同一个域中,则只需使用Windows安全性。如果您不在同一个域中,则无法为客户端使用Windows凭据,因为服务器无法验证它们。您可能必须使用服务端的证书颁发机构颁发的客户端证书或使用自定义凭据。

但是,如果您在同一个域但仍需要服务端证书,则必须在服务的配置文件中指定serviceCertificate,并使用HTTPS定义端点地址,即如果您作为独立服务托管。如果您在IIS中托管,那么您在IIS网站的设置中定义证书。

您可能会发现这个有用的Application Deployment Scenarios

答案 1 :(得分:0)

嘿,谢谢你帮助Mogounus。我的问题非常复杂,但简而言之,我的要求是在服务器端使用证书,经过一些研究我认为我现在已经弄明白了。因此,如果我理解正确,当在具有消息安全性的客户端/服务器上使用证书时,客户端将使用其私钥对消息进行签名,然后附加其pub密钥,并使用服务器的pub密钥加密,只有服务器才能够解密,从而获得签名的消息以及客户端的pub密钥,以验证签名数据。

在我的情况下,我让它工作,我只需要验证服务是否正在使用正确的东西进行签名/加密,但这似乎不可能,因为在邮件打包时,它已经是加密,我看不到内容。

我在搜索此答案时发现的另一个问题是,并非所有客户端都在同一个域中,因此必须在客户端使用user / pwd或certs。