.NET CORE 5 发出 HTTPS 请求时出现“HandshakeFailure”

Ped*_*eal 10 https ssl-certificate .net-core asp.net-core

这个请求根本无法在 c# 上工作(RestClient 或 HttpClient)。当我尝试连接到 RestSharp 上的端点时,我得到 StatusCode 0,在 HttpClient 上我得到此异常:

身份验证失败,因为远程方发送了 TLS 警报:“HandshakeFailure”。

有趣的是,它在邮递员上运行得很好(是的,我尝试从邮递员生成代码,但它仍然不起作用)。

我查看了邮递员,它使用了 TLS 1.2 证书,然后我尝试了以下操作:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

依然没有。

检查了 url、身份验证、标头、http 动词,一切正常。

Obs:我只能通过 VPN 访问此端点,这听起来像吗?

检查邮递员使用的 TLS 版本

n-d*_*lop 20

我有一个类似的问题。就我而言,我的服务器的 Windows 版本太旧了。这些请求在我的(最新的)Windows 10 笔记本电脑上完全正常工作,但在我的 Windows Server 2012 R2 计算机上会因“HandshakeFailure”而失败。

如果我理解正确的话,这一切都取决于您的操作系统附带的受支持的密码。(您可以在此处找到大多数 Windows 版本支持的所有密码的列表: https: //learn.microsoft.com/en-au/windows/win32/secauthn/cipher-suites-in-schannel)。

如果您的 HTTPS 网站使用操作系统不支持的密码,.NET 将抛出此错误。您可以使用sslscan ( https://github.com/rbsec/sslscan )等工具找出 HTTPS 端点支持的密码。

为什么它在邮递员/浏览器中有效? 浏览器和其他工具附带了自己的一组密码。这就是为什么这些工具不受此影响。

遗憾的是,除了更新您的 Windows 机器之外,我不知道有任何解决办法。但我希望它能回答为什么它不起作用的问题。

对于此问题还有另一种可能的解决方案,但前提是您拥有所请求的域。您可以“降级”用于域的密码。