2017-11-19 2 views
-2

Visual C++ 2015에서 Casablanka Rest SDK를 사용하고 있습니다. Casablanka SDK는 winhttp를 기반으로합니다. SSL을 통해 요청이 전송 될 때마다 예외가 수신됩니다. 예외 :winhttp WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR

"SSL 오류 : WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR 내부 오류입니다."

문제는 Windows 2008 R2 서버에서만 발생합니다. Windows 10 및 Windows 2012 서버를 실행하는 노트북은 정상입니다.

Windows 2008에서 SSL 지원 웹 사이트를 탐색해도 문제가 없습니다. 그러나 위의 오류로 인해 응용 프로그램이 작동하지 않고 실패합니다.

어떤 도움에 감사드립니다 :)

는 그냥 WinHTTP에 추적 추가 :

"23 : 24 : 24 : 31.228 : USR-REQ 003B2A60는 OnTcpConnected 콜백 23받은 31.244를 :: 비동기 I을 (오류 -caboe = SEC_E_INVALID_TOKEN (0x80090308), #bytes)23 : 24 : 31.244 :: sys-sent 처리 HttpSendHttpRequest 완료 (오류 -caboe = 0x80090308) = 0, overlapped = 00397790) 23 : 24 : 31.244 :: sys-sender가 요청에 실패했으며 오류 = SEC_E_INVALID_TOKEN (-2146893048) 23:24:31. 244 :: ERROR_WINHTTP_FROM_WIN32 매핑 됨 (SEC_E_INVALID_TOKEN) -2146893048 (ERROR_WINHTTP_SECURE_FAILURE) 12175 "

+0

winhttp 추적은 다음과 같습니다. –

+0

Windows 2008에서 TLS 1.2를 협상 할 수없는 이유로 인해 문제가 발생했습니다. 그래서 보안 프로토콜을 다운 그레이드해야했습니다. 문제를 해결하기 위해 다음과 같이 수정했습니다. –

답변

0

Windows 2008에서 TLS 1.2를 협상 할 수 없습니다. 그래서 Rest SDK (cpprestsdk \ Release \ src \ http \ client \ http_client_winhttp.cpp)의 프로토콜을 다운 그레이드했습니다.

변경 :

DWORD secure_protocols = WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1 | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1; 
    if (IsWindowsVersionOrGreater(6, 3, 0)) { 
     secure_protocols += WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2; 
    } 
    win32_result = ::WinHttpSetOption(m_hSession, WINHTTP_OPTION_SECURE_PROTOCOLS, &secure_protocols, sizeof(secure_protocols)); 

나는 이것이 일부는 같은 문제에 직면 도움이되기를 바랍니다.

관련 문제