帮助在.net上设置wsHttpBinding WCF服务

时间:2010-05-03 11:38:08

标签: .net wcf web-services certificate wshttpbinding

我正在尝试使用wsHttpBinding托管WCF服务。我使用makecert创建了一个证书,并在web.config中添加了一些行。

这是我得到的错误:

System.ArgumentException: The certificate 'CN=WCfServer' must have a private key that is capable of key exchange. The process must have access rights for the private key.

在谷歌上搜索它似乎是证书文件访问权限的一些问题。我使用cacls给予NETWORK SERVICE以及我的用户名的读取权限,但它没有改变任何内容。

我还访问了证书文件属性中的安全设置,并完全控制了NETWORK SERVICE和我的用户名。再无济于事。

你能指导一下我的问题是什么,我究竟需要做什么?对于这些证书,我真的很邋。。

这是我的web.config:

<system.serviceModel>

<services>
        <service name="Abc.Service" behaviorConfiguration="Abc.ServiceBehavior">
            <endpoint address="" binding="wsHttpBinding" bindingConfiguration="Abc.BindConfig" contract="Abc.IService">
                <identity>
                    <dns value="localhost"/>
                </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        </service>
    </services>

<behaviors>
    <serviceBehaviors>
        <behavior name="Abc.ServiceBehavior">
            <serviceMetadata httpGetEnabled="true"/>
            <serviceDebug includeExceptionDetailInFaults="false"/>

            <serviceCredentials>
                <clientCertificate>
                  <authentication certificateValidationMode="PeerTrust"/>
                </clientCertificate>
                <serviceCertificate findValue="WCfServer" storeLocation="CurrentUser" storeName="My" x509FindType="FindBySubjectName" />
            </serviceCredentials>

        </behavior>
    </serviceBehaviors>
</behaviors>

<bindings>
  <wsHttpBinding>
    <binding name="Abc.BindConfig">
      <security mode="Message">
        <message clientCredentialType="Certificate" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

</system.serviceModel>

3 个答案:

答案 0 :(得分:3)

从我从网上收集的内容看来,这似乎不是权限问题,更像是证书配置有问题。

Here有关于如何允许访问私钥的说明。

您是否已安装并运行IIS7。有very simple tool用于创建我已成功用于WCF通信的证书(而不是makecert)。

答案 1 :(得分:2)

好的..我弄清楚问题是什么。使用makecert创建证书时,必须使用-pe选项,使生成的私有可导出,以便可以在证书中使用。问题是与vs2008捆绑的makecert是版本5.131,它没有-pe选项。我在microsoft sdk 6中找到了版本6.0,它有选项。

这是我在.net中作为初学者发现的最大问题。有很多不兼容的版本同样的东西,当你在互联网上查找东西时,你不知道有人在谈论哪个版本。

答案 2 :(得分:1)

看看Windows HTTP Services Certificate Configuration Tool (WinHttpCertCfg.exe)。它允许将对X.509证书的私钥的访问权限授予Windows帐户。

Here is a blog post解释了如何使用该工具。