gpt4 book ai didi

c++ - 是什么导致来自 WinHttpSendRequest 的间歇性 SEC_E_BUFFER_TOO_SMALL 错误?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:33:22 25 4
gpt4 key购买 nike

我有一个工具可以针对具有相同 header 、相同帖子正文等的相同 URL 执行 HTTPS POST 命令多次迭代。

我遇到的情况是,对于某些测试人员,WinHttpSendRequest() 函数经常失败,随后对 GetLastError() 的调用返回 SEC_E_BUFFER_TOO_SMALL (0x80090321),记录在此处:COM Error Codes (Security and Setup) .

这不是 WinHttpSendRequest() 的记录错误代码,相当广泛的谷歌搜索也没有为此找到任何东西。

我已经四重检查了我提供的 WinHttpSendRequest() 输入是否正确有效,并且这些输入连续工作了数万次......直到它不工作为止。

我无法提供 MVCE,但根据此处提供的假设,我正在寻找错误代码返回的任何可能原因。

最佳答案

有人离线给我提供了答案,我觉得很有趣。

在 TLS 1.2 与 RSA+ECDHE 发生的 key 交换期间,ECDHE 的 256 字节(2048 位)公共(public)模数整数是随机生成的,因此它偶尔会有一个高位字节为零。在这种情况下,正在使用的服务器(一些带有 OpenSSL 的 Linux 机器,不知道发行版或任何版本)使用 255 字节而不是 256 字节发送整数。

以其稍短的形式接收公共(public)模数整数的 WinHTTP 代码显然无法正确处理它。值得注意的是,我还没有看到这个问题在所有软件更新的 Windows 7 上重现,但在 Windows 8 上经常看到它(Windows 10 尚未测试)。

Microsoft Edge 中的这个错误报告证实了相同的行为,只是模数是 1024 位而不是 2048,但可能是同一个问题:

TLS ServerKeyExchange with 1024 DHE may encode dh_Y as 127 bytes, breaking Internet Explorer 11

但是,这确实让我想知道 OpenSSL 是否应该填充整数。我没有寻找实际规范来了解在这种情况下允许的行为是什么。

关于c++ - 是什么导致来自 WinHttpSendRequest 的间歇性 SEC_E_BUFFER_TOO_SMALL 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38752888/

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