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

6l7fqoea  于 2023-02-19  发布在  其他
关注(0)|答案(3)|浏览(350)

我正在向第3方API发出WebRequest,它工作得很好。在此期间,API的证书发生了变化,现在当我从我们的开发环境发出请求时,我收到响应,因为请求已中止,无法创建SSL/TLS安全通道。我尝试在代码中设置不同的协议,但响应没有变化。我在资源管理器中也收到不同的错误。但那在启用SSL 3后得到了修复,我在代码中使用的是httpwebrequest,最初的dll在.net 3. 5中,现在已经更新到.net 4. 6,在firefox中检查证书细节时,我可以看到证书是TLS 1.3。据我所知,它不支持在.net 4.6.1,因为我得到协议不支持错误时,我设置它的TLS值。开发环境是Windows Server 2016。相同的API正在微软云中的生产环境中工作。不确定确切的服务器版本。
有什么办法我可以解决这个问题。

更新密码套件中没有证书算法。按照以下文档添加密码套件,此问题现已解决。

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

l0oc07j2

l0oc07j21#

很遗憾,您还无法修复此问题。
.NET Framework只是委托底层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;

(Some站点可能要求您也附加| SecurityProtocolType.Tls11,但那些站点确实应该更新他们的服务器)。
这个SecurityProtocolType值12288(表示TLS 1.3)现在是面向未来的,并传递到底层Windows API层,但如果您调用的站点只使用TLS 1.3,则会抛出异常:
Win32异常:客户端和服务器无法通信,因为它们没有共同的算法
因此,此修复仅在 * TLS 1.3支持推广到Windows Server * 之后才起作用。
Windows 10和Windows Server 1903对此有 * 实验性支持 *,但如果你不能从4.6升级你的.NET Framework,我怀疑你是否能安装一个使用实验性功能的Windows Server版本。
有关详细信息,请参阅以下参考资料:

bcs8qyzn

bcs8qyzn2#

证书算法不在密码套件中。按照以下文档添加密码套件,此问题现已解决。
https://learn.microsoft.com/en-us/windows-server/security/tls/manage-tls

cngwdvgl

cngwdvgl3#

当Web应用程序没有访问证书的权限时,也会出现相同的错误。
我们的Web应用程序使用客户端证书针对远程Web服务进行身份验证。重新颁发并安装证书后,我们开始看到此错误。
解决方案是向运行Web应用程序的帐户授予权限。
在Windows上:

  • 管理计算机证书〉证书-本地计算机〉个人〉证书
  • 右键单击证书〉所有任务〉管理私钥
  • 然后添加应用程序池的相关帐户-在我们的示例中是网络服务

希望这能帮助到一些人

相关问题