如何处理 TLS 1.3 协商期间收到的来自 SCHANNEL 的 SEC_I_RENEGOTIATE

问题描述 投票:0回答:1

我有一个客户端应用程序,它使用 SCHANNEL 来协商 TLS 1.1 和 TLS 1.2,该应用程序已经工作了多年。我最近更改了代码以使用 SCH_CREDENTIALS 而不是 SCHANNEL_CRED,它仍然适用于 Windows 10 上的 TLS 1.2(并且我假设是 TLS 1.1)。在 Windows 11 上运行时,它会按预期和期望尝试 TLS 1.3。但是,当 SCHANNEL 返回 SEC_I_RENEGOTIATE 状态时,它会失败。这种状态让我感到困惑,因为我的理解是,出于安全考虑,重新协商已从 1.3 中删除。 (我从来没有必要在 1.1 或 1.2 中实现它。)在 Microsoft 安全博客 https://www.microsoft.com/en-us/security/blog/2020/08/20/take-transport-layer- security-tls-to-the-next-level-with-tls-1-3/ ,谈到升级到 TLS 1.3,作者说要让升级后的代码正确处理 SEC_I_RENEGOTIATE 状态,但没有给出任何提示应该做。

请提供一些有关如何处理 SEC_I_RENEGOTIATE 状态的信息。

请注意,这不是网络客户端。这是自定义协议的加密连接,直接调用 SCHANNEl。当尝试连接到基于 OpenSSL 的服务器时,我可以重现该问题。

winapi windows-11 tls1.3
1个回答
0
投票

根据协商 Schannel 连接

When you receive the SEC_I_RENEGOTIATE return code, your application must call AcceptSecurityContext (Schannel)    (servers) or InitializeSecurityContext (Schannel)    (clients), passing in empty input buffers. After this call returns a value, proceed as though your application were creating a new connection
© www.soinside.com 2019 - 2024. All rights reserved.