我正在用 C# 编写一个最终用于 IoT 的 UWP 应用程序,但现在我只在本地调试。我正在使用Windows.Web.Http.HttpClient
连接到自托管的 WCF REST Web 服务,我也编写了该服务并在同一台机器上作为控制台应用程序运行以进行测试。该服务需要使用证书进行相互身份验证,因此我有一个 CA 证书、服务证书和客户端证书。
我的 UWP 代码是这样工作的:
- 检查应用程序证书商店是否安装了客户端证书和 CA 证书。
- 如果没有,请分别从 PFX 文件和 CER 文件安装。
- 附加
Certificate
到HttpBaseProtocolFilter
并将过滤器添加到HttpClient
- 调用
HttpClient.PostAsync
在我打电话后,PostAsync
我收到以下错误:An Error Occurred in the Secure Channel Support
. 经过大量的在线搜索,根据常识,我很确定HttpClient
是因为建立相互身份验证的 SSL 连接的问题而在呕吐。但根据我的故障排除,我不知道为什么。
为了进一步解决问题,我使用 编写了一个普通的旧控制台应用程序System.Net.Http.HttpClient
,将客户端证书附加到请求中,一切正常。遗憾的是,System.Net
UWP 不完全支持。我也尝试过不将证书附加到 UWP HttpClient
,应用程序会通过 UI 提示我选择已安装的证书。我选择了正确的证书并仍然得到相同的异常(这至少让我知道证书已正确安装并从应用程序的角度与 CA 正确验证)。此外,我从浏览器中点击了 Web 服务上的 GET,在出现提示时选择客户端证书,并且能够下载文件。
我尝试过使用 Fiddler,并且我认为由于它代理流量的方式,它似乎工作得更进一步,除了我的 Web 服务拒绝请求为 Forbidden (大概是因为 Fiddler 没有在请求中包含正确的客户端证书)。我还没有使用 Wireshark,因为让 Wireshark 在 Windows 上使用 localhost 工作很痛苦。
我的下一步是开始将 Web 服务更改为不需要客户端身份验证,看看这是否是问题所在。
两个问题:为什么Windows.Web.Http.HttClient
在这种情况下不起作用?而且,不太重要的是,有什么好的 HTTP 监控工具可以帮助我进一步调试吗?