Windows.Web.Http.HttpClient问题连接到具有不同客户端证书的同一服务器

时间:2016-07-15 05:32:01

标签: c# ssl windows-store-apps win-universal-app

当我使用具有不同客户端证书的https与同一服务器端点建立多个连接时,我遇到了Windows.Web.Http.HttpClient的问题。

我的设置有点像:

连接A:连接到https://www.myserver.com/path?querystring - 使用HttpBaseProtocolFilter创建为“客户端证书A”配置的HttpClient实例。

一切正常。

现在我使用新的HttpClient实例创建另一个连接到同一个服务器(不同的查询字符串),这次过滤器配置为'客户端证书B'。

此连接似乎已通过服务器,但看起来服务器获取了错误的客户端证书。我无法访问服务器或其日志,但是从我发现的错误中我想知道它是否会获得“客户证书A”。

我注意到如果我放一个'。'就会消失。第二个连接中服务器名称的“.com”部分后面的字符。这让我怀疑某些基于服务器名称的缓存。

这在Windows 8.1 Surface平板电脑上失败了。它似乎在我的开发笔记本电脑上正常工作。我正在构建的应用程序是Windows应用商店应用程序,因此这也可能是问题的一部分。

有没有人知道如何缓存客户端证书,或者ssl / tls连接是否是HttpClient实例的“本地”?

Windows App Store应用程序(C#)是否可以清除/禁用/断开任何现有的ssl / tls会话?

欢迎任何指示。

PS:我正在构建的应用程序是一个“监控”应用程序,可以使用不同的客户端证书连接到服务器以访问不同的“帐户”。该应用程序旨在显示多个帐户的聚合视图,因此需要针对同一端点使用多个不同的客户端证书。这一切都适用于Android / iOS版本的应用程序,但我无法使Windows版本工作..(哦,服务器/帐户访问机制不受我的控制在任何方式)

1 个答案:

答案 0 :(得分:0)

  

我注意到如果我放一个'。'就会消失。 '.com'之后的字符   第二个连接中服务器名称的一部分。这让我   怀疑某个地方根据服务器名称进行了一些缓存。

似乎http客户端的缓存行为导致此问题...

您可以尝试以下方式关闭缓存。

HTTPClient every time returns the same string

或关注SO帖子也可以帮助你。

How to stop credential caching on Windows.Web.Http.HttpClient?