我们有一个 ASP.NET Core 8 应用程序(从旧框架迁移而来),它通过 http 与许多第三方服务集成;其中一些第三方需要客户证书。
我们通过“运行时配置”管理证书 - 也就是说,我们仅在即将发出请求时而不是在初始化应用程序时知道指纹。这使我们能够“即时”更改证书,而无需重新部署应用程序。
我们有一个或多或少有效的实现,但它没有使用
HttpClientFactory
;它创建一个新的 HttpClient
,并将新的处理程序传递给构造函数(使用一些缓存以避免创建大量新的 HttpClient
)。
如果可能的话,我们正在考虑使用
HttpClientFactory
,但我陷入困境
HttpClient
注册时,我们不/无法知道我们需要的指纹所以我的主要问题是:如何将“运行时”信息传递给处理程序?
还有一个关于将客户端证书添加到潜在池处理程序中的陷阱的第二个问题。
我可能要做的是
SocketsHttpHandler
与指定客户端结合使用并实现 SslOptions.LocalCertificateSelectionCallback
,然后根据主机名从“缓存”中检索证书这并不完美,因为“无序”到达我们的应用程序的请求可能会相互覆盖,但我认为对于我们的特定场景来说,这是一个相当低的风险
我已经有了一个似乎可以运行的实现,但我尚未针对实际的第 3 方集成对其进行测试