【问题标题】:Self signed client certificate does not reach server application自签名客户端证书未到达服务器应用程序
【发布时间】:2017-08-04 19:47:58
【问题描述】:

我有以下设置:

  • 用于开发目的的自签名证书
  • OWIN 托管的 Web API,作为 ASF 服务部署在本地 Azure Service Fabric 群集上。 Web API 使用带有相关开发证书的 HTTPS。
  • 调用 Web API 的简单 .net 客户端应用程序。在该应用程序中设置了 ServicePointManager.ServerCertificateValidationCallback 方法,因此它始终返回 true(因为 CA 不受信任)
  • 客户端应用程序和 Web API 都在同一台本地开发机器上。证书安装在“机器商店”的同一台机器上

现在我可以通过提供所需的客户端证书来使用 Fiddler 调用 Web api。但是,当我尝试通过 .net 代码(无论是 RestSharp 还是 WebRequest)执行相同操作时,客户端证书不存在于服务器端的 RequestContext 对象中。这会导致未经授权的响应。我不认为问题出在客户端代码上,证书已正确加载并分配给 http 客户端或请求。 Fiddler 显示到服务器的加密隧道。但是,客户端证书似乎不存在于服务器端。

我完全不知道我错过了什么可能导致这种行为。任何帮助将不胜感激。

【问题讨论】:

    标签: ssl asp.net-web-api2 owin azure-service-fabric self-signed


    【解决方案1】:

    将证书安装到“本地机器/受信任的人”中。

    【讨论】:

      【解决方案2】:

      服务器需要在请求之前已经信任证书。它发送的CertificateRequest 消息列出了可以签署客户端证书的可接受 CA。如果客户端证书的签名者不在该消息中,则无法发送。

      如何在您的环境中实现这一点留给读者作为练习。一般来说,既然 SSL 证书是免费的,那么没有理由沉迷于自签名证书的时间成本和管理不便。恕我直言,即使您为 CA 签名付费也没有。

      【讨论】:

        【解决方案3】:

        当一个服务通过 HTTPS 调用另一个服务并且它无法设置安全连接时,我遇到了问题。我的问题是,由于该服务作为网络服务运行,它找不到证书,因为它正在本地机器/我的证书存储中查找。

        当我从我的网络浏览器运行时,它工作正常,因为我的浏览器在 currectuser/我的证书存储中找到了证书。

        将证书添加到机器/我的商店,看看是否有帮助。

        【讨论】:

          猜你喜欢
          • 2010-11-13
          • 2011-06-11
          • 2014-06-07
          • 2014-05-04
          • 1970-01-01
          • 2013-09-19
          • 1970-01-01
          • 2014-04-15
          • 1970-01-01
          相关资源
          最近更新 更多