【问题标题】:selfhosted WCF-Service + client certificate authentication自托管 WCF 服务 + 客户端证书身份验证
【发布时间】:2012-02-20 12:30:27
【问题描述】:

我正在尝试实现一个自托管的 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

我猜我已经正确地创建和安装了我的证书。

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

亲切的问候, 迈克尔

【问题讨论】:

    标签: .net wcf web-services authentication


    【解决方案1】:

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

    什么是Http子代码?我猜你得到的是 403.7(这意味着客户端证书没有安装,或者浏览器没有提供)、403.16(客户端证书不受信任)、403.17(客户端证书已过期)或可能是 403.13(客户端证书已吊销) .

    我看到的一个问题 - 在没有传出 Web 访问的服务器上 - 您是否获得了上述 403 代码之一(不记得是哪个),因为服务器无法获得证书吊销列表 - 所以它拒绝所有证书。可以禁用此检查,但显然需要注意安全注意事项。

    【讨论】:

    • 当我连接到服务时,Firefox 不应该要求我提供证书吗?如何检索子代码?例如403.x - 我只看到主要代码......我已经尝试过使用提琴手,但不幸的是输出不是很有帮助。客户端证书及其 root-ca 安装在客户端计算机上。
    • 这是一个 Windows 盒子吗? Firefox 不像 IE 和 Chrome 那样使用 Windows 证书存储。它有自己的商店,因此您也需要在那里安装它(或使用 IE 或 Chrome 之一进行测试)。假设您使用的是 IIS7 或更高版本,我认为您必须配置详细的错误代码 - 出于安全原因,默认情况下未启用它,因为它提供了太多信息供公众使用。
    • 是的,它是 Windows。我已经尝试将证书放入 Firefox 的证书存储中。似乎 WCF 服务不要求证书。我在哪里可以激活详细信息错误代码?它是一个自托管的应用程序 - 是否需要配置 iis?
    • 啊 - 它是自托管的。不确定如何启用详细的错误消息,但您可以尝试设置 WCF 跟踪,看看是否为您提供了所需的额外信息。可能值得在 IIS 中托管它(例如,使用 Windows Process Activation Services)作为实验,看看您是否可以深入了解它。如果 WCF 服务是自托管的,我不确定是否要调试它的 SSL 端。
    • 好吧,我已经在不同的浏览器中测试了整个事情。 IE、FF 和 Chrome 无法请求客户端证书。唯一显示弹出窗口的浏览器是 safari。我试图实现一个测试客户端。不幸的是,身份验证再次失败,出现 403 错误。有人知道如何解决这个问题吗?
    【解决方案2】:

    有关客户端证书的安装位置,请参考以下步骤:

    您需要有如下客户端证书:

    在客户端机器上:

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

    在服务器机器上:

    本地机器 --> TrusterPeople 应该安装了 MyClientCert.cer

    确保设置正确。我看到您在当前用户的 TrustedPeople 中有客户端证书。希望现在可以清楚地了解证书安装

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

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

    【讨论】:

    • 我已经完全按照您的描述安装了证书。发生同样的错误。不要求客户提供他的证书。行为配置是否正确?
    • 在您的情况下,客户端和服务器是否都在同一台机器上?如果不是,那么您的客户端证书存储应该是本地计算机而不是当前用户。例如:
    • 不,客户端和服务器不在同一台机器上。是否有可能获取任何日志文件?
    • 在这种情况下,客户端证书需要在服务器的本地机器存储中。更改它以反映在您的 app.config 中。如果您可以更新您的问题以包含客户端、服务器配置文件会很容易
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-09
      • 2013-10-07
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      相关资源
      最近更新 更多