2016-08-03 4 views
3

У меня есть инструмент, который выполняет команду POST HTTP S с тем же URL-адресом с одинаковыми заголовками, одинаковым телом почты и т. Д. Для ряда итераций.Что вызывает прерывистую ошибку SEC_E_BUFFER_TOO_SMALL, исходящую от WinHttpSendRequest?

То, что я столкнулся в том, что для некоторых тестеров, каждый так часто функции WinHttpSendRequest() терпит неудачу и последующий вызов GetLastError() возвращает SEC_E_BUFFER_TOO_SMALL (0x80090321) документированное здесь: COM Error Codes (Security and Setup).

Это не задокументированный код ошибки для WinHttpSendRequest(), и довольно обширный Googling вообще ничего не обнаружил для этого.

У меня четверо проверено, что входы, которые я предоставляю WinHttpSendRequest(), являются правильными и действительными, и эти входы работают десятки тысяч раз подряд ... пока это не произойдет.

Я не могу предоставить MVCE, но в соответствии с предоставленными здесь предположениями Im ищет любую возможную причину возврата кода ошибки.

+1

Пожалуйста, отправьте код. –

+0

«Я не могу предоставить MVCE» (пример минимального проверяемого кода). – qexyn

+0

Поскольку вы делаете ** безопасный ** HTTP-запрос и получаете ** ошибку ** **, вероятно, вероятно, что 'WinHttpSendRequest()' сам внутренне снабжает недостаточно буфер данных для API безопасности, который он использует для шифрования HTTP-трафика. Вероятно, это не ошибка с вашей стороны. Хотя трудно сказать наверняка, так как вы не указали никакого кода. –

ответ

2

Мне был предоставлен ответ от кого-то в автономном режиме, и это очень интересно.

Во время обмена ключами, которое происходит в TLS 1.2 с RSA + ECDHE, 256-байтовое (2048-битное) значение общего модуля ECDHE генерируется случайным образом, и как таковое он будет иногда иметь старший байт нуля. В этом случае сервер используется (некоторые Linux коробки с OpenSSL, не знает, дистрибутива или версию чего-либо) отправляет целое число, используя 25 байт вместо 256.

WinHTTP код, который принимает целый общественный модуль в его слегка более короткой форме, по-видимому, не справляется с этим правильно. Стоит отметить, что я еще не видел эту проблему, воспроизведенную на Windows 7, со всеми обновлениями программного обеспечения, но часто вижу это в Windows 8 (Windows 10 еще не тестировалась).

Это сообщение об ошибке в Microsoft Краю подтверждает то же самое поведение, только с 1024-битным модулем вместо 2048, но, вероятно, это та же самая проблема:

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

Однако, это делает мне интересно если OpenSSL должен заполнить целое число. Я не искал фактическую спецификацию, чтобы узнать, каково допустимое поведение (ы) в этой ситуации.