2017-11-19 73 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対応のWebサイトを閲覧する際に問題はありませんが、私のアプリケーションはうまく動作せず、上記のエラーで失敗します。

すべてのヘルプは高く評価され:)

をするだけのWinHTTPトレース追加:

「23:24:31.228を:: USR-REQ 003B2A60は 23 OnTcpConnectedコールバックを受け取っ:24:31.244 ::非同期Iは、 (エラー-caboe = SEC_E_INVALID_TOKEN(0x80090308)、#bytes)を処理​​します。 = 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)); 

私は、これはいくつかが同じ問題に直面してのに役立ちます願っています。

関連する問題