gpt4 book ai didi

c# - 请求被中止,无法创建 SSL/TLS 安全通道 - HttpWebRequest

转载 作者:行者123 更新时间:2023-12-04 22:36:19 27 4
gpt4 key购买 nike

我正在向第 3 方 API 发出网络请求,并且工作正常。在 API 的证书发生更改期间,现在当我从开发环境发出请求时,我收到响应,因为请求已中止,无法创建 SSL/TLS 安全通道。我尝试在代码中设置不同的协议(protocol),但响应没有变化。我在资源管理器中也遇到了不同的错误。但启用 SSL 3 后该问题已得到解决。我在代码中使用httpwebrequest。最初的 dll 位于 .net 3.5 中,现在已更新到 .net 4.6。在 Firefox 中检查证书详细信息时,我可以看到证书是 TLS 1.3。据我了解,.net 4.6.1 不支持它,因为当我设置 TLS 值时,出现协议(protocol)不支持的错误。开发环境是 Windows Server 2016。相同的 API 在 Microsoft 云的生产环境中运行。不确定确切的服务器版本。

有什么办法可以解决这个问题吗?

更新密码套件中不存在证书算法。按照下面的文档添加密码套件,问题现已解决。

https://learn.microsoft.com/en-us/windows-server/security/tls/manage-tls

最佳答案

不幸的是,您尚无法解决此问题。

.NET Framework 只是委托(delegate)给底层 Windows 平台 WinINet/SChannel API 来进行传出 HTTPS 调用,而 Windows Server 2016 上的 WinINet/SChannel 尚未推出并进行必要的更改以允许 TLS 1.3 传出连接。

针对 Framework 4.7.1 及更高版本的应用程序将自动使用其运行的操作系统上可用的最高 TLS 版本,如果您连接的服务器不支持它,则回退到较低版本,因此您将不会'不需要以下代码(除非您当前的代码[或依赖项]已经使用较低版本调用它)。

如果您陷入 Framework < 4.7.1 的困境,您可以为最终的 Windows 更新准备代码:

// From .NET Framework 4.8.0, simply use SecurityProtocolType.Tls13
// (or rather don't use this code at all from 4.7.1, configure the TLS versions in the OS)
const SecurityProtocolType tls13 = (SecurityProtocolType)12288;

ServicePointManager.SecurityProtocol = tls13 | SecurityProtocolType.Tls12;

(某些网站可能还要求您附加 | SecurityProtocolType.Tls11,但这些网站确实应该更新其服务器)。

这个 SecurityProtocolType 值 12288(表示 TLS 1.3)现在将是面向 future 的,并传递到底层 Windows API 层,但如果您仅调用的站点,现在将引发异常采用 TLS 1.3:

Win32Exception: The client and server cannot communicate, because they do not possess a common algorithm

因此,此修复仅在 Windows Server 推出 TLS 1.3 支持之后才有效。

Windows 10 和 Windows Server 1903 对此有实验性支持,但如果您无法从 4.6 升级 .NET Framework,我怀疑您是否可以安装使用实验性功能的 Windows Server 版本。

有关详细信息,请参阅以下引用资料:

关于c# - 请求被中止,无法创建 SSL/TLS 安全通道 - HttpWebRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64855415/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com