2016-08-03 9 views
3

HTTP S 동일한 헤더, 동일한 게시물 본문, 같은 반복에 대해 동일한 URL에 대해 POST 명령을 실행하는 도구가 있습니다. COM Error Codes (Security and Setup) : 나는에 실행 한 어떤WinHttpSendRequest에서 발생하는 간헐적 인 SEC_E_BUFFER_TOO_SMALL 오류의 원인은 무엇입니까?

는 일부 테스터를 들어, 모든 너무 자주 WinHttpSendRequest() 함수는 실패하고 GetLastError에 대한 후속 호출은() 여기에 문서화 SEC_E_BUFFER_TOO_SMALL (0x80090321)을 반환합니다.

이것은 WinHttpSendRequest()에 대한 문서화 된 오류 코드가 아니며, 상당히 광범위한 Google 검색 결과가 전혀 표시되지 않았습니다.

WinHttpSendRequest()를 제공하는 입력이 올 바르고 유효하며 그 입력이 수십만 번 연속으로 작동 하는지를 네 번 확인했습니다.

MVCE를 제공 할 수는 없지만 여기 제공된 가정하에 오류 코드를 다시 볼 수있는 이유를 찾고 있습니다.

+1

코드를 게시하십시오. –

+0

"MVCE를 제공 할 수 없습니다"(Minimum Verifiable Code Example). – qexyn

+0

** 보안 ** HTTP 요청을하고 ** 보안 ** 오류가 발생하기 때문에 'WinHttpSendRequest()'자체가 내부적으로 사용하는 보안 API에 불충분 한 데이터 버퍼를 제공하고있는 것 같습니다 HTTP 트래픽을 암호화합니다. 아마 당신의 잘못이 아닙니다. 비록 당신이 어떤 코드도 보여주지 않았기 때문에 확실하게 말할 수는 없지만 .. –

답변

2

나는 오프라인에서 누군가로부터 대답을 받았고 매우 흥미 롭습니다.

RSA + ECDHE가있는 TLS 1.2에서 발생하는 키 교환 중에 ECDHE의 256 바이트 (2048 비트) 공용 계수 정수가 임의로 생성되므로 가끔 상위 바이트가 0입니다. 이 상황에서 사용되는 서버 (OpenSSL을 사용하는 일부 Linux 상자, 배포판이나 버전을 모르는 서버)는 256 대신 25 바이트를 사용하여 정수를 보냅니다.

공개 모듈러스 정수를 수신하는 WinHTTP 코드 그것의 약간 더 짧은 모양에서 명백하게 그것을 정확하게 취급하지 않는다. 아직이 문제가 Windows 7에서 모든 소프트웨어 업데이트와 함께 재현 된 것을 보지 못했지만 Windows 8 (Windows 10 아직 테스트되지 않은)에서 자주 볼 수 있습니다.

마이크로 소프트 에지에서이 버그 보고서는 단지 대신 2048의 1024 비트 계수와 같은 동작을 확인하지만, 아마 같은 문제 : 그러나

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

, 그것은 나를 궁금하게 수행 OpenSSL이 정수를 채워야하는 경우. 나는이 상황에서 허용 된 행동이 무엇인지보기 위해 실제 사양을 찾지 않았다.