HttpClientHandler - 在运行时设置 ClientCertificate

问题描述 投票:0回答:1

我们有一个 ASP.NET Core 8 应用程序(从旧框架迁移而来),它通过 http 与许多第三方服务集成;其中一些第三方需要客户证书。

我们通过“运行时配置”管理证书 - 也就是说,我们仅在即将发出请求时而不是在初始化应用程序时知道指纹。这使我们能够“即时”更改证书,而无需重新部署应用程序。

我们有一个或多或少有效的实现,但它没有使用

HttpClientFactory
;它创建一个新的
HttpClient
,并将新的处理程序传递给构造函数(使用一些缓存以避免创建大量新的
HttpClient
)。

如果可能的话,我们正在考虑使用

HttpClientFactory
,但我陷入困境

  • 在进行
    HttpClient
    注册时,我们不/无法知道我们需要的指纹
  • 当我们发出请求时,我们知道指纹,但我们没有对处理程序的引用(而且我不知道如何获取)
  • 因为处理程序是池化的,所以我对在可以与另一个集成共享的处理程序上添加客户端证书持谨慎态度(这更容易克服;我们的这些集成很少,我们可以为其创建一个命名的客户端/自定义处理程序)每一个)

所以我的主要问题是:如何将“运行时”信息传递给处理程序?

还有一个关于将客户端证书添加到潜在池处理程序中的陷阱的第二个问题。

asp.net-core dotnet-httpclient .net-8.0
1个回答
0
投票

我可能要做的是

  • 实现“证书缓存”服务,以便我可以在发出请求之前存储主机名 -> 证书链接
  • SocketsHttpHandler
    与指定客户端结合使用并实现
    SslOptions.LocalCertificateSelectionCallback
    ,然后根据主机名从“缓存”中检索证书

这并不完美,因为“无序”到达我们的应用程序的请求可能会相互覆盖,但我认为对于我们的特定场景来说,这是一个相当低的风险

我已经有了一个似乎可以运行的实现,但我尚未针对实际的第 3 方集成对其进行测试

© www.soinside.com 2019 - 2024. All rights reserved.