我正在开发一个需要升级才能在 Windows 上使用 TLS 1.3 的 TLS 客户端。有没有人使用 SChannel API 成功实现了 TLS 1.3?
我需要了解如何处理新结构 SCH_CREDENTIALS 以及从服务器处理 SEC_I_RENEGOTIATE 的正确方法。任何拥有显示 TLS 1.3 与 SChannel 握手的示例客户端/服务器代码的人都会非常有帮助。
Windows 2022 和 TLS 1.3 的插件问题很少:
- 当 EncryptMessage() 和 send() API 与 TLS 1.3 一起使用时;send() 以多个块发送数据,但有效负载很小。示例:一个 30 字节的缓冲区在第一轮发送 3 个字节,在第二轮迭代中发送 27 个字节。QueryContextAttributes() 返回最大大小,例如 16384。因此,期望几百字节的任何数据都应该一次性发送。
直到 TLS 1.2;SChannel 一次性发送所有此类数据,例如 30 个字节等。这是 TLS 1.3 预期的吗?或者这是我们处理 Encrypt() + send() 的方式中的错误
- 我从注册表启用了 SChannel 日志。使用 TLS 1.3 握手;事件查看器将几个参数指示为 0。下面显示了 TLS 1.2 和 TLS 1.3 的示例。这是预期的吗?
对于 TLS 1.3 握手:
TLS 客户端握手成功完成。协商的密码参数如下。
协议版本:未知密码套件:0x1302 交换强度:0 位上下文句柄:0x1a1ccf646f0 目标名称:localhost
对于 TLS 1.2 握手:
TLS 客户端握手成功完成。协商的密码参数如下。
协议版本:TLS 1.2 CipherSuite:0xC030 交换强度:384 位上下文句柄:0x1a1ccf201f0 目标名称:checkappexec.microsoft.com 本地证书主体名称:
协议版本在 TLS 1.3 日志中显示为“未知”。交换强度在 TLS 1.3 握手日志中显示为 0。
使用 TLS 1.2,我们可以看到有效值 (384) 和协议版本。