Windows.Web.Http.HttpClient 使用不同的客户端证书连接到同一服务器时出现问题
本文关键字:连接 服务器 问题 证书 客户端 HttpClient Http Web Windows | 更新日期: 2023-09-27 17:57:00
当我有多个使用具有不同客户端证书的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 应用商店应用 (C#) 是否可以清除/禁用/断开任何现有的 SSL/TLS 会话?
欢迎任何指示。
PS:我正在构建的应用程序是一个"监控"应用程序,可以使用不同的客户端证书连接到服务器以访问不同的"帐户"。该应用旨在显示多个帐户的聚合视图,因此需要对同一终结点使用多个不同的客户端证书。这一切都适用于该应用程序的Android/iOS版本,但我无法获得Windows版本的工作。(哦,服务器/帐户访问机制不受我的控制)
我注意到如果我在".com"后面加上"."字符,问题就会消失 第二个连接中的服务器名称的一部分。这让我 怀疑某处存在基于服务器名称的缓存。
似乎 http 客户端的缓存行为导致了这个问题......
您可以尝试以下方法关闭缓存。
HTTPClient 每次都返回相同的字符串
或关注SO帖子也可以帮助您。
如何在Windows.Web.Http.HttpClient上停止凭据缓存?