自托管WCF服务+客户端证书身份验证

时间:2012-02-20 12:30:27

标签: .net wcf web-services authentication

我正在尝试实现自托管的WCF服务,该服务应该使用证书进行客户端身份验证。不幸的是,验证失败。日志文件说,客户端不提供证书。如果尝试通过firefox访问该服务,它会说:“错误403 - 禁止”。

以下代码显示了通过app-config文件的配置。

  <serviceBehaviors>
    <behavior name="sslbehaviour">
      <serviceMetadata httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <serviceCredentials>
        <clientCertificate>
          <authentication certificateValidationMode="ChainTrust" trustedStoreLocation="CurrentUser"/>
        </clientCertificate>
        <serviceCertificate findValue="cert-thumb-print" x509FindType="FindByThumbprint" storeLocation="CurrentUser" storeName="My"/>
      </serviceCredentials>            
    </behavior>
  </serviceBehaviors>

endpoint address="https://localhost:443/service" binding="wsHttpBinding"
      bindingConfiguration="BindingForResultPost" contract="MobD.IEndpointService" />

错误消息:System.ServiceModel.Channels.HttpsClientCertificateNotPresent.aspx

我想我已正确创建和安装了我的证书。

我会非常感激每一个提示......

亲切的问候, 迈克尔

3 个答案:

答案 0 :(得分:0)

你说当你尝试通过Firefox访问它时会得到403. Firefox是否安装了客户端证书?

什么是Http子代码?我的猜测是你得到403.7(这意味着客户端证书没有安装,或者没有被浏览器显示),403.16(客户端证书不可信),403.17(客户端证书已过期)或可能403.13(客户端证书被撤销)

我看到的一个问题 - 在没有外发网络访问权限的服务器上 - 是你得到上述403代码中的一个(不记得是哪个)因为服务器无法获得证书撤销列表 - 所以它拒绝所有证书。可以禁用此检查,但显然需要注意安全注意事项。

答案 1 :(得分:0)

请参阅以下有关安装客户端证书的步骤:

您需要拥有以下客户证书:

在客户端计算机上:

当前用户 - &gt;个人文件夹应安装客户端证书MyClientCert.pfx

在服务器计算机上:

本地计算机 - &gt; TrusterPeople应该安装MyClientCert.cer

确保设置正确。我看到你在当前用户的TrustedPeople中有客户端证书。希望现在它在证书安装上清楚

请参阅此 LINK ,其中介绍了有关正在安装的客户端证书以及如何告知浏览器从商店中选择一个:

注意:何时使用.pfx和.cer文件

答案 2 :(得分:0)

当您自托管WCF服务时,您必须在Windows中分配端口权限。

在MSDN上查看此文章:How to: Configure a Port with an SSL Certificate

您还可以使用OpenSSL检查端口状态。