带有cert auth的WCF服务客户端,在调试时工作,但不能生效

时间:2012-02-16 08:12:21

标签: c# asp.net wcf web-config certificate

我正在使用经过身份验证的WCF服务。我在VS debugmode中工作,但是当我发布并运行它时将无法正常工作。

cerificatesd存储在CurrentUser / TrustedPeople中。 这是我的配置行为 - 部分:

<behavior name="LoadClientCert">
    <clientCredentials>
        <clientCertificate findValue="CN=Certificate1"
                        storeLocation="CurrentUser" storeName="TrustedPeople"
                        x509FindType="FindBySubjectDistinguishedName" />
        <serviceCertificate>
          <defaultCertificate findValue="CN=Certificate2"
                        storeLocation="CurrentUser" storeName="TrustedPeople"
                        x509FindType="FindBySubjectDistinguishedName" />
          <authentication certificateValidationMode="None"
                        revocationMode="NoCheck" />
        </serviceCertificate>
      </clientCredentials>
</behavior>

错误消息:请求错误 服务器遇到处理请求的错误。有关详细信息,请参阅服务器日志。

我的猜测是IIS用户无权使用证书。但这只是猜测。

我在哪里可以找到该服务器日志?我尝试了事件查看器,但我没有找到任何东西。我也把这个添加到我的配置中没有运气(尝试解决方案后它是空的):

<system.diagnostics>
<sources>
  <source name="System.ServiceModel.MessageLogging">
    <listeners>
             <add name="messages"
             type="System.Diagnostics.XmlWriterTraceListener"
             initializeData="f:\logs\messages.svclog" />
      </listeners>
  </source>
</sources>
</system.diagnostics>
<diagnostics>
<messageLogging 
     logEntireMessage="true" 
     logMalformedMessages="false"
     logMessagesAtServiceLevel="true" 
     logMessagesAtTransportLevel="false"
     maxMessagesToLog="3000"
     maxSizeOfMessageToLog="2000"/>
</diagnostics>

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

如果您使用2是SSL,即使用SSL保护传输通道并使用SSL验证您的客户端,则证书应按如下方式放置:

对于服务器证书(.pfx文件):

在Local Machine Personal文件夹中安装证书。

对于客户证书:

在服务器计算机(.cer文件)上: 在本地计算机中安装客户端证书 - &gt;受信任的人民商店

在客户端计算机上(.pfx文件): 在本地用户中安装客户端证书 - &gt;个人商店

此外,如果服务器证书是自签名的,请确保在调用服务方法之前在客户端使用以下代码:

System.Net.ServicePointManager.ServerCertificateValidationCallback = (sender, cert, chain, error) =>
                                                                                 {
                                                                                     return true;
                                                                                 };

更新:

How to enable Tracing