我正在使用C#编写一个UWP应用程序,最终将被用于物联网,但现在我只在本地调试。我使用`Windows.Web.Http.HttpClient`连接到自托管的WCF REST Web服务,该服务也是我编写并运行在同一台机器上进行测试的控制台应用程序。该服务需要证书的相互认证,因此我有CA证书、服务证书和客户端证书。
我的UWP代码工作方式如下:
为了进一步排除故障,我编写了一个普通的控制台应用程序,使用"System.Net.Http.HttpClient",将客户端证书附加到请求中,一切正常。可惜,在UWP上不完全支持"System.Net"。我还尝试了不将证书附加到UWP的"HttpClient"上,应用程序提示我选择已安装的证书。我选择了正确的证书,仍然得到相同的异常(这至少让我知道证书从应用程序的角度正确安装并且可以与CA正确验证)。此外,我通过浏览器访问Web服务上的GET请求时,选择客户端证书后,可以下载文件。
我尝试使用Fiddler,我认为由于代理流量的方式,它似乎可以进一步工作,但是我的Web服务拒绝该请求,因为Fiddler没有在请求中包含正确的客户端证书(可能是这个原因)。我尚未使用Wireshark,因为使用Windows上的localhost进行Wireshark工作很麻烦。
我的下一步是开始更改Web服务,使其不需要客户端认证,看看是否出现问题。
两个问题:为什么在这种情况下`Windows.Web.Http.HttClient`无法工作?而且,不太重要,有没有建议好的HTTP监视工具来帮助我进一步调试?
我的UWP代码工作方式如下:
- 检查应用程序证书存储是否安装了客户端证书和CA证书。
- 如果没有,则从PFX文件和CER文件中分别安装。
- 将"证书"附加到"HttpBaseProtocolFilter"中,并将过滤器添加到"HttpClient"中。
- 调用"HttpClient.PostAsync"。
为了进一步排除故障,我编写了一个普通的控制台应用程序,使用"System.Net.Http.HttpClient",将客户端证书附加到请求中,一切正常。可惜,在UWP上不完全支持"System.Net"。我还尝试了不将证书附加到UWP的"HttpClient"上,应用程序提示我选择已安装的证书。我选择了正确的证书,仍然得到相同的异常(这至少让我知道证书从应用程序的角度正确安装并且可以与CA正确验证)。此外,我通过浏览器访问Web服务上的GET请求时,选择客户端证书后,可以下载文件。
我尝试使用Fiddler,我认为由于代理流量的方式,它似乎可以进一步工作,但是我的Web服务拒绝该请求,因为Fiddler没有在请求中包含正确的客户端证书(可能是这个原因)。我尚未使用Wireshark,因为使用Windows上的localhost进行Wireshark工作很麻烦。
我的下一步是开始更改Web服务,使其不需要客户端认证,看看是否出现问题。
两个问题:为什么在这种情况下`Windows.Web.Http.HttClient`无法工作?而且,不太重要,有没有建议好的HTTP监视工具来帮助我进一步调试?
makecert
工具创建了一个 CA 证书,然后用该 CA 证书颁发了客户端和服务端证书。 - koopaking3