我有一个奇怪的问题。有问题的应用是:
此应用必须在后台联系REST服务。此REST服务需要客户端证书。我使用System.Net.Http.HttpClient通过TLS 1.2使用客户端证书连接到REST服务。
这有效。但是,经过一天左右的时间,它只是停止工作并返回
The request was aborted: Could not create SSL/TLS secure channel
即使重新启动IIS应用程序也无法解决此问题。通常情况下,它只是重新开始工作,我无法解决导致这种情况的情况。重启服务器甚至不一定要修复它。远程REST应用程序与(许多)其他客户端库进行通讯时没有问题。在同一个应用程序的DEV / TRAIN和PROD实例中,我遇到了完全相同的问题。需要明确的是,它确实可以正常工作,一段时间后突然停止工作,因此我知道客户端证书有效并且TLS 1.2有效。我还使用完全不同的语言(PowerShell,perl)在其他几个应用程序中对相同的REST端点使用TLS 1.2和完全相同的客户端证书,完全没有任何问题。
我无法弄清楚正在发生什么。我尝试过在每次REST调用之前从文件系统读取客户端证书,并在Startup类中读取一次并注入它。两种方法都有相同的问题。
现在,我怀疑的一件事是,此客户端REST调用未在异步方法中运行,因为它处于静态方法中,但我看不到它将如何产生此结果。如果查看REST端点的远程服务器日志,则会看到一条错误消息,提示未提供任何客户端证书。我已进行调试,以便在REST调用之前在本地应用程序日志中写入客户端证书指纹,以确保该客户端证书确实存在,并且-日志中始终包含正确的客户端证书指纹。在失败的REST调用之前。
更新:我修改了REST调用,使其异步,并且没有区别。我现在正在重用HttpClient
的一个实例,该实例已加载了客户端证书,但仍然会在一段时间后开始发生此错误。
任何想法都值得赞赏。